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 EvtDeviceWdmIrpPre process 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 de.

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(estado) sea igual a TRUEy 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 ioStatus.Status miembro del IRP en un valor de estado para el que NT_SUCCESS(estado) sea igual a FALSEy 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.

Observaciones

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 de para controlar 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 función de devolución de llamada, la función de devolución de llamada debe llamar a WdfDeviceWdmDispatchPreprocessedIrp devolver 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 de adicional a los IRP que recibe la función de devolución de llamada. La ubicación adicional de la pila de E/S 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 EvtDeviceWdmIrpPre process 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 Valor
de la plataforma de destino de Universal
versión mínima de KMDF 1.0
encabezado de wdfdevice.h (incluya Wdf.h)
irQL <=DISPATCH_LEVEL

Consulte también

WdfDeviceInitAssignWdmIrpPreprocessCallback

WdfDeviceWdmDispatchPreprocessedIrp