EVT_WDFDEVICE_WDM_IRP_PREPROCESS回调函数 (wdfdevice.h)

[仅适用于 KMDF]

驱动程序的 EvtDeviceWdmIrpPreprocess 事件回调函数在框架处理 IRP 之前接收 IRP。

语法

EVT_WDFDEVICE_WDM_IRP_PREPROCESS EvtWdfdeviceWdmIrpPreprocess;

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

参数

[in] Device

框架设备对象的句柄。

[in, out] Irp

指向 IRP 结构的指针。

返回值

EvtDeviceWdmIrpPreprocess 回调函数必须:

  • 将 IRP 的 IoStatus.Status 成员设置为STATUS_SUCCESS或另一个状态值, NT_SUCCESS (状态) 等于 TRUE,并在调用 IoCompleteRequest) 后返回相同的值 (,如果回调函数成功完成收到的 IRP。
  • 将 IRP 的 IoStatus.Status 成员设置为状态值 ,NT_SUCCESS (状态) 等于 FALSE,并在调用 IoCompleteRequest) 后返回相同的值 ((如果回调函数检测到错误)。
  • 如果回调函数调用 IoMarkIrpPending,则返回STATUS_PENDING。
  • 如果回调函数调用该方法,则返回 WdfDeviceWdmDispatchPreprocessedIrp 方法返回的值。

注解

若要注册 EvtDeviceWdmIrpPreprocess 回调函数,驱动程序必须调用 WdfDeviceInitAssignWdmIrpPreprocessCallback

驱动程序可以使用 EvtDeviceWdmIrpPreprocess 回调函数执行以下任一或全部操作:

  • 按照 用于处理 IRP 的 WDM 规则来处理框架不支持的 IRP。
  • 在框架处理 IRP 之前预处理 IRP。
  • 设置完成例程,以便驱动程序可以在框架处理后处理 IRP。
有关如何实现 EvtDeviceWdmIrpPreprocess 回调函数的详细信息,请参阅 处理框架外部的 WDM IRP

如果希望框架随后处理 IRP,就像未调用 EvtDeviceWdmIrpPreprocess 回调函数一样,回调函数必须调用 WdfDeviceWdmDispatchPreprocessedIrp 以将 IRP 返回到框架。

如果驱动程序注册 EvtDeviceWdmIrpPreprocess 回调函数,则框架会将额外的 I/O 堆栈位置 添加到回调函数接收的 IRP。 额外的 I/O 堆栈位置允许回调函数在调用 WdfDeviceWdmDispatchPreprocessedIrp 之前设置 IoCompletion 例程。

EvtDeviceWdmIrpPreprocess 回调函数在调用线程的 IRQL 上调用。 IRQL 由框架传递给 EvtDeviceWdmIrpPreprocess 的 IRP 类型确定。 例如,如果 PnP 管理器在 IRQL = PASSIVE_LEVEL发送 IRP_MN_QUERY_DEVICE_RELATIONS ,则框架会在 IRQL = PASSIVE_LEVEL 调用 EvtDeviceWdmIrpPreprocess

要求

   
目标平台 通用
最低 KMDF 版本 1.0
Header wdfdevice.h (包括 Wdf.h)
IRQL <=DISPATCH_LEVEL

另请参阅

WdfDeviceInitAssignWdmIrpPreprocessCallback

WdfDeviceWdmDispatchPreprocessedIrp