Função WdfRequestCancelSentRequest (wdfrequest.h)
[Aplica-se a KMDF e UMDF]
O método WdfRequestCancelSentRequest tenta cancelar uma solicitação de E/S que o chamador enviou anteriormente a um destino de E/S.
Sintaxe
BOOLEAN WdfRequestCancelSentRequest(
[in] WDFREQUEST Request
);
Parâmetros
[in] Request
Um identificador para um objeto de solicitação de estrutura.
Retornar valor
WdfRequestCancelSentRequest retornará TRUE se entregar com êxito a solicitação de cancelamento para o destino de E/S do driver. Esse método retornará FALSE se a solicitação já tiver sido concluída ou cancelada ou se o driver de destino de E/S não tiver chamado WdfRequestMarkCancelable ou WdfRequestMarkCancelableEx.
Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.
Comentários
Um driver pode chamar WdfRequestCancelSentRequest para tentar cancelar uma solicitação de E/S que ele havia enviado anteriormente para um destino de E/S chamando WdfRequestSend.
Se a solicitação estiver na fila do destino de E/S, a estrutura cancelará a solicitação. Se a estrutura já tiver entregue a solicitação ao driver do destino de E/S e se esse driver tiver chamado WdfRequestMarkCancelable ou WdfRequestMarkCancelableEx para habilitar o cancelamento, a estrutura chamará a função de retorno de chamada EvtRequestCancel desse driver. Se o driver do destino não tiver chamado WdfRequestMarkCancelable ou WdfRequestMarkCancelableEx, a solicitação não será cancelada, a menos que a solicitação se torne cancelável.
Se o driver tiver registrado uma função de retorno de chamada CompletionRoutine para a solicitação, a estrutura chamará a função de retorno de chamada depois que a solicitação tiver sido cancelada.
Normalmente, se o driver chamar WdfRequestCancelSentRequest, ele deverá incrementar a contagem de referência do objeto de solicitação. Para obter mais informações, consulte Sincronizando o cancelamento de solicitações enviadas.
Para obter mais informações sobre cancelamento de solicitação, consulte Cancelando solicitações de E/S.
Exemplos
O exemplo de código a seguir é do driver de exemplo kmdf_fx2 . Este exemplo é uma função de retorno de chamada EvtIoStop . Como esse driver envia cada solicitação para seu destino de E/S, a função de retorno de chamada EvtIoStop chama WdfRequestCancelSentRequest se o dispositivo tiver sido removido.
VOID
OsrFxEvtIoStop(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN ULONG ActionFlags
)
{
UNREFERENCED_PARAMETER(Queue);
if (ActionFlags & WdfRequestStopActionSuspend) {
WdfRequestStopAcknowledge(Request, FALSE);
} else if (ActionFlags & WdfRequestStopActionPurge) {
WdfRequestCancelSentRequest(Request);
}
return;
}
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1.0 |
Versão mínima do UMDF | 2,0 |
Cabeçalho | wdfrequest.h (inclua Wdf.h) |
Biblioteca | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <=DISPATCH_LEVEL |
Regras de conformidade da DDI | DriverCreate(kmdf), EvtIoStopCancel(kmdf), EvtIoStopCompleteOrStopAck(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |