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)

Confira também

Completionroutine

EvtRequestCancel

WdfRequestMarkCancelable

WdfRequestMarkCancelableEx

WdfRequestSend