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.

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

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.
  • 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 solo

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

    Devuelve STATUS_PENDING si la función de devolución de llamada llama a IoMarkIrpPending.

Observaciones

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.

Requisitos

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

Consulte también

WdfDeviceConfigureWdmIrpDispatchCallback

WdfDeviceWdmDispatchIrp

WdfDeviceWdmDispatchIrpToIoQueue