EVT_WDFDEVICE_WDM_IRP_DISPATCH función de devolución de llamada (wdfdevice.h)
[Se aplica a KMDF y UMDF]
Una función de devolución de llamada de evento EvtDeviceWdmIrpDispatch recibe un IRP antes de que el marco procese el IRP.
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
)
{...}
[in] Device
Identificador de un objeto de dispositivo de marco.
[in] MajorFunction
Uno de los códigos de función principales de IRP definidos 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 de 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 proporcionó el controlador 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.
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.
- KMDF solo Establezca el ioStatus.Status miembro 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.
- KMDF soloEstablezca el IoStatus.Status miembro del IRP en un valor de estado para el que NT_SUCCESS(status) sea FALSE y devuelva el mismo valor (después de llamar a IoCompleteRequest) si la función de devolución de llamada detecta un error.
- KMDF soloDevuelve STATUS_PENDING si la función de devolución de llamada llama a IoMarkIrpPending.
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 de 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 EvtDeviceWdmIrpDispatch función de devolución de llamada, un controlador no debe establecer una rutina de finalización. Si se necesita una rutina de finalización, un controlador KMDF puede proporcionar un EvtDeviceWdmIrpPreprocess función de devolución de llamada 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.
Requisito | Valor |
---|---|
de la plataforma de destino de | Universal |
versión mínima de KMDF | 1.11 |
versión mínima de UMDF | 2.17 |
encabezado de | wdfdevice.h (incluya Wdf.h) |
irQL | <=DISPATCH_LEVEL |