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) |