EVT_WDFDEVICE_WDM_IRP_DISPATCH función de devolución de llamada (wdfdevice.h)
[Se aplica a KMDF y UMDF]
La función de devolución de llamada de evento EvtDeviceWdmIrpDispatch de un controlador recibe un IRP antes de que el marco procese el IRP.
Sintaxis
EVT_WDFDEVICE_WDM_IRP_DISPATCH EvtWdfdeviceWdmIrpDispatch;
NTSTATUS EvtWdfdeviceWdmIrpDispatch(
[in] WDFDEVICE Device,
[in] UCHAR MajorFunction,
[in] UCHAR MinorFunction,
[in] ULONG Code,
[in] WDFCONTEXT DriverContext,
[in, out] PIRP Irp,
[in] WDFCONTEXT DispatchContext
)
{...}
Parámetros
[in] Device
Identificador de un objeto de dispositivo de marco.
[in] MajorFunction
Uno de los códigos de función principales de IRP que se definen en wdm.h.
[in] MinorFunction
Uno de los códigos de función secundaria de IRP de E/S que se definen en wdm.h para el código MajorFunction .
[in] Code
Especifica un valor de código de control de E/S. Este parámetro solo es válido si MajorFunction está establecido en IRP_MJ_DEVICE_CONTROL.
[in] DriverContext
Puntero sin tipo a la información de contexto definida por el controlador que el controlador proporcionó cuando llamó a WdfDeviceConfigureWdmIrpDispatchCallback.
[in, out] Irp
Puntero a una estructura IRP.
[in] DispatchContext
Puntero sin tipo a la información de contexto de envío del marco. El controlador debe proporcionar este parámetro cuando llama a WdfDeviceWdmDispatchIrp.
Valor devuelto
La función de devolución de llamada EvtDeviceWdmIrpDispatch debe:
- Devuelve el valor que devuelve el método WdfDeviceWdmDispatchIrp , si la función de devolución de llamada llama a ese método.
- Devuelve el valor que devuelve el método WdfDeviceWdmDispatchIrpToIoQueue , si la función de devolución de llamada llama a ese método.
- Solo KMDF Establezca el miembro IoStatus.Status del IRP en STATUS_SUCCESS u otro valor de estado para el que NT_SUCCESS(status) sea TRUE y devuelva el mismo valor (después de llamar a IoCompleteRequest) si la función de devolución de llamada completa correctamente el IRP recibido.
- Solo KMDFEstablezca el miembro IoStatus.Status del IRP en un valor de estado para el que NT_SUCCESS(status) es igual a FALSE y devuelva el mismo valor (después de llamar a IoCompleteRequest) si la función de devolución de llamada detecta un error.
- Solo KMDFDevuelve STATUS_PENDING si la función de devolución de llamada llama a IoMarkIrpPending.
Comentarios
La función de devolución de llamada EvtDeviceWdmIrpDispatch solo debe usarse para seleccionar una cola específica para un IRP. Para ello, el controlador llama al método WdfDeviceWdmDispatchIrpToIoQueue desde la función de devolución de llamada.
Si, después de examinar un IRP en esta función de devolución de llamada, el controlador no sabe cómo enviar el IRP, el controlador puede llamar a WdfDeviceWdmDispatchIrp para devolver el IRP al marco para el control predeterminado.
Un controlador UMDF debe llamar a WdfDeviceWdmDispatchIrp o WdfDeviceWdmDispatchIrpToIoQueue desde esta función de devolución de llamada. Un controlador KMDF tiene la opción adicional de llamar a ninguno y, en su lugar, completar el IRP o marcarlo pendiente.
Para registrar una función de devolución de llamada EvtDeviceWdmIrpDispatch , el controlador debe llamar a WdfDeviceConfigureWdmIrpDispatchCallback.
En su función de devolución de llamada EvtDeviceWdmIrpDispatch , un controlador no debe establecer una rutina de finalización. Si se necesita una rutina de finalización, un controlador KMDF puede proporcionar una función de devolución de llamada EvtDeviceWdmIrpPreprocess en lugar de EvtDeviceWdmIrpDispatch.
Para obtener más información sobre cómo especificar colas para irP a medida que llegan, consulte Envío de IRP a colas de E/S.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Versión mínima de KMDF | 1.11 |
Versión mínima de UMDF | 2.17 |
Encabezado | wdfdevice.h (incluir Wdf.h) |
IRQL | <=DISPATCH_LEVEL |