Función WdfRequestCancelSentRequest (wdfrequest.h)

[Se aplica a KMDF y UMDF]

El método WdfRequestCancelSentRequest intenta cancelar una solicitud de E/S que el autor de la llamada envió anteriormente a un destino de E/S.

Sintaxis

BOOLEAN WdfRequestCancelSentRequest(
  [in] WDFREQUEST Request
);

Parámetros

[in] Request

Identificador de un objeto de solicitud de marco.

Valor devuelto

WdfRequestCancelSentRequest devuelve TRUE si entrega correctamente la solicitud de cancelación al destino de E/S del controlador. Este método devuelve FALSE si la solicitud ya se ha completado o cancelado, o si el controlador de destino de E/S no ha llamado a WdfRequestMarkCancelable o WdfRequestMarkCancelableEx.

Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.

Comentarios

Un controlador puede llamar a WdfRequestCancelSentRequest para intentar cancelar una solicitud de E/S que anteriormente había enviado a un destino de E/S llamando a WdfRequestSend.

Si la solicitud está en la cola del destino de E/S, el marco cancela la solicitud. Si el marco ya ha entregado la solicitud al controlador del destino de E/S y si ese controlador ha llamado a WdfRequestMarkCancelable o WdfRequestMarkCancelableEx para habilitar la cancelación, el marco llama a la función de devolución de llamada EvtRequestCancel del controlador. Si el controlador del destino no ha llamado a WdfRequestMarkCancelable o WdfRequestMarkCancelableEx, la solicitud no se cancela a menos que la solicitud se pueda cancelar.

Si el controlador ha registrado una función de devolución de llamada CompletionRoutine para la solicitud, el marco llama a la función de devolución de llamada después de cancelar la solicitud.

Normalmente, si el controlador llama a WdfRequestCancelSentRequest, debe incrementar el recuento de referencias del objeto de solicitud. Para obtener más información, vea Sincronizar la cancelación de solicitudes enviadas.

Para obtener más información sobre la cancelación de solicitudes, consulte Cancelación de solicitudes de E/S.

Ejemplos

El ejemplo de código siguiente procede del controlador de ejemplo de kmdf_fx2 . Este ejemplo es una función de devolución de llamada EvtIoStop . Dado que este controlador envía cada solicitud a su destino de E/S, la función de devolución de llamada EvtIoStop llama a WdfRequestCancelSentRequest si se ha quitado el dispositivo.

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 Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Versión mínima de UMDF 2.0
Encabezado wdfrequest.h (incluya Wdf.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Reglas de cumplimiento de DDI DriverCreate(kmdf), EvtIoStopCancel(kmdf), EvtIoStopCompleteOrStopAck(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Consulte también

CompletionRoutine

EvtRequestCancel

WdfRequestMarkCancelable

WdfRequestMarkCancelableEx

WdfRequestSend