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 的另一个状态值,如果回调函数成功完成收到的 IRP,则调用 IoCompleteRequest) 后返回 (相同的值。
- 将 IRP 的 IoStatus.Status 成员设置为 NT_SUCCESS (状态) 等于 FALSE 的状态 (值,如果回调函数检测到错误,则调用 IoCompleteRequest) 后返回相同的值。
- 如果回调函数调用 IoMarkIrpPending,则返回STATUS_PENDING。
- 如果回调函数调用该方法,则返回 WdfDeviceWdmDispatchPreprocessedIrp 方法返回的值。
注解
若要注册 EvtDeviceWdmIrpPreprocess 回调函数,驱动程序必须调用 WdfDeviceInitAssignWdmIrpPreprocessCallback。
驱动程序可以使用 EvtDeviceWdmIrpPrepPreprocess 回调函数执行以下任何或全部操作:
- 遵循用于处理 IRP 的 WDM 规则来处理框架不支持的 IRP。
- 在框架处理 IRP 之前对其进行预处理。
- 设置完成例程,以便驱动程序可以在框架处理 IRP 后对其进行后处理。
如果希望框架随后像未调用 EvtDeviceWdmIrpPreprocess 回调函数一样处理 IRP,则回调函数必须调用 WdfDeviceWdmDispatchPreprocessedIrp 才能将 IRP 返回到框架。
如果驱动程序注册 了 EvtDeviceWdmIrpPreprocess 回调函数,框架会将额外的 I/O 堆栈位置 添加到回调函数接收的 I/O 堆栈位置。 额外的 I/O 堆栈位置允许回调函数在调用 WdfDeviceWdmDispatchPreprocessedIrp 之前设置 IoCompletion 例程。
EvtDeviceWdmIrpPreprocess 回调函数在调用线程的 IRQL 上调用。 IRQL 由框架传递给 EvtDeviceWdmIrpPreprocess 的 IRP 类型确定。 例如,如果 PnP 管理器在 IRQL = PASSIVE_LEVEL 发送IRP_MN_QUERY_DEVICE_RELATIONS ,则框架在 IRQL = PASSIVE_LEVEL 调用 EvtDeviceWdmIrpPrepPreprocess 。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
最低 KMDF 版本 | 1.0 |
标头 | wdfdevice.h (包括 Wdf.h) |
IRQL | <=DISPATCH_LEVEL |