EVT_WDF_REQUEST_COMPLETION_ROUTINE función de devolución de llamada (wdfrequest.h)
[Se aplica a KMDF y UMDF]
La función de devolución de llamada de eventos CompletionRoutine de un controlador se ejecuta cuando otro controlador completa una solicitud de E/S especificada.
Sintaxis
EVT_WDF_REQUEST_COMPLETION_ROUTINE EvtWdfRequestCompletionRoutine;
void EvtWdfRequestCompletionRoutine(
[in] WDFREQUEST Request,
[in] WDFIOTARGET Target,
[in] PWDF_REQUEST_COMPLETION_PARAMS Params,
[in] WDFCONTEXT Context
)
{...}
Parámetros
[in] Request
Identificador de un objeto de solicitud de marco que representa la solicitud de E/S completada.
[in] Target
Identificador de un objeto de destino de E/S que representa el destino de E/S que completó la solicitud.
[in] Params
Puntero a una estructura de WDF_REQUEST_COMPLETION_PARAMS que contiene información sobre la solicitud completada. Consulte la nota siguiente con respecto a la validez de los parámetros de finalización.
[in] Context
Información de contexto proporcionada por el controlador, que el controlador especificó en una llamada anterior a WdfRequestSetCompletionRoutine.
Valor devuelto
None
Observaciones
Para registrar una función de devolución de llamada CompletionRoutine para una solicitud de E/S, un controlador debe llamar a WdfRequestSetCompletionRoutine. Para obtener más información sobre esta función de devolución de llamada, consulte Finalización de solicitudes de E/S.
La estructura de parámetros de finalización se rellena completamente con información válida solo si el controlador ha dado formato a la solicitud llamando a una de las siguientes opciones:
- Métodos WdfIoTargetFormatXxx , por ejemplo WdfIoTargetFormatRequestForRead
- Métodos WdfUsbTargetDeviceFormatRequestForXxx , por ejemplo WdfUsbTargetDeviceFormatRequestForString
- Métodos WdfUsbTargetPipeFormatRequestForXxx , por ejemplo WdfUsbTargetPipeFormatRequestForWrite
Si el controlador da formato a la solicitud mediante WdfRequestFormatRequestUsingCurrentType o WdfRequestWdmFormatUsingStackLocation, solo el campo IoStatus de la estructura de parámetros de finalización es válido.
Un controlador KMDF CompletionRoutine se puede ejecutar en IRQL <= DISPATCH_LEVEL independientemente del valor ExecutionLevel especificado en la estructura WDF_OBJECT_ATTRIBUTES para el objeto de solicitud de E/S.
Ejemplos
El tipo de función se declara en Wdfrequest.h, como se indica a continuación.
typedef VOID
(EVT_WDF_REQUEST_COMPLETION_ROUTINE)(
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
IN PWDF_REQUEST_COMPLETION_PARAMS Params,
IN WDFCONTEXT Context
);
Para definir una función de devolución de llamada CompletionRoutine denominada MyCompletionRoutine, primero debe proporcionar una declaración de función que requieren SDV y otras herramientas de comprobación, como se indica a continuación:
EVT_WDF_REQUEST_COMPLETION_ROUTINE MyCompletionRoutine;
A continuación, implemente la función de devolución de llamada de la siguiente manera:
VOID
MyCompletionRoutine (
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
IN PWDF_REQUEST_COMPLETION_PARAMS Params,
IN WDFCONTEXT Context
)
{...}
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) |
IRQL | <=DISPATCH_LEVEL |