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 KMDF

    Establezca 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 KMDF

    Devuelve 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

Consulte también

WdfDeviceConfigureWdmIrpDispatchCallback

WdfDeviceWdmDispatchIrp

WdfDeviceWdmDispatchIrpToIoQueue