Compartir a través de


EVT_WDFDEVICE_WDM_IRP_PREPROCESS función de devolución de llamada (wdfdevice.h)

[Solo se aplica a KMDF]

La función de devolución de llamada de eventos EvtDeviceWdmIrpPreprocess de un controlador recibe un IRP antes de que el marco procese el IRP.

Sintaxis

EVT_WDFDEVICE_WDM_IRP_PREPROCESS EvtWdfdeviceWdmIrpPreprocess;

NTSTATUS EvtWdfdeviceWdmIrpPreprocess(
  [in]      WDFDEVICE Device,
  [in, out] PIRP Irp
)
{...}

Parámetros

[in] Device

Identificador de un objeto de dispositivo de marco.

[in, out] Irp

Puntero a una estructura IRP .

Valor devuelto

La función de devolución de llamada EvtDeviceWdmIrpPreprocess debe:

  • 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.
  • 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.
  • Devuelve STATUS_PENDING, si la función de devolución de llamada llama a IoMarkIrpPending.
  • Devuelve el valor que devuelve el método WdfDeviceWdmDispatchPreprocessedIrp , si la función de devolución de llamada llama a ese método.

Comentarios

Para registrar una función de devolución de llamada EvtDeviceWdmIrpPreprocess , el controlador debe llamar a WdfDeviceInitAssignWdmIrpPreprocessCallback.

El controlador puede usar una función de devolución de llamada EvtDeviceWdmIrpPreprocess para realizar cualquiera de las acciones siguientes, o todas:

  • Controle un IRP que el marco no admita, siguiendo las reglas de WDM para controlar los IRP.
  • Preprocese un IRP antes de que el marco lo controle.
  • Establezca una rutina de finalización para que el controlador pueda posprocesar un IRP después de que el marco lo controle.
Para obtener más información sobre cómo implementar una función de devolución de llamada EvtDeviceWdmIrpPreprocess , consulte Control de IRP de WDM fuera del marco.

Si desea que el marco controle posteriormente el IRP como lo haría si no se hubiera llamado a la función de devolución de llamada EvtDeviceWdmIrpPreprocess , la función de devolución de llamada debe llamar a WdfDeviceWdmDispatchPreprocessedIrp para devolver el IRP al marco.

Si el controlador registra una función de devolución de llamada EvtDeviceWdmIrpPreprocess , el marco agrega una ubicación de pila de E/ S adicional a irP que recibe la función de devolución de llamada. La ubicación de pila de E/S adicional permite que la función de devolución de llamada establezca una rutina de IoCompletion antes de llamar a WdfDeviceWdmDispatchPreprocessedIrp.

Se llama a la función de devolución de llamada EvtDeviceWdmIrpPreprocess en el IRQL del subproceso que realiza la llamada. IRQL viene determinado por el tipo de IRP que el marco pasa a EvtDeviceWdmIrpPreprocess. Por ejemplo, si el administrador de PnP envía IRP_MN_QUERY_DEVICE_RELATIONS en IRQL = PASSIVE_LEVEL, el marco llama a EvtDeviceWdmIrpPreprocess en IRQL = PASSIVE_LEVEL.

Requisitos

Requisito Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Encabezado wdfdevice.h (incluya Wdf.h)
IRQL <=DISPATCH_LEVEL

Consulte también

WdfDeviceInitAssignWdmIrpPreprocessCallback

WdfDeviceWdmDispatchPreprocessedIrp