EVT_WDFDEVICE_WDM_IRP_DISPATCH回调函数 (wdfdevice.h)
[适用于 KMDF 和 UMDF]
驱动程序的 EvtDeviceWdmIrpDispatch 事件回调函数在框架处理 IRP 之前接收 IRP。
语法
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
)
{...}
参数
[in] Device
框架设备对象的句柄。
[in] MajorFunction
在 wdm.h 中定义的 IRP 主要函数代码之一。
[in] MinorFunction
在 wdm.h 中为 MajorFunction 代码定义的 I/O IRP 次要函数代码之一。
[in] Code
指定 I/O 控件代码值。 仅当 MajorFunction 设置为 IRP_MJ_DEVICE_CONTROL 时,此参数才有效。
[in] DriverContext
指向驱动程序定义上下文信息的非类型化指针,驱动程序在调用 WdfDeviceConfigureWdmIrpDispatchCallback 时提供。
[in, out] Irp
指向 IRP 结构的指针。
[in] DispatchContext
指向框架调度上下文信息的非类型化指针。 驱动程序在调用 WdfDeviceWdmDispatchIrp 时必须提供此参数。
返回值
EvtDeviceWdmIrpDispatch 回调函数必须:
- 如果回调函数调用该方法,则返回 WdfDeviceWdmDispatchIrp 方法返回的值。
- 如果回调函数调用该方法,则返回 WdfDeviceWdmDispatchIrpToIoQueue 方法返回的值。
- 仅 KMDF 将 IRP 的 IoStatus.Status 成员设置为STATUS_SUCCESS或NT_SUCCESS (状态) 等于 TRUE 的另一个状态值,如果回调函数成功完成收到的 IRP,) 调用 IoCompleteRequest 后返回相同的值 (。
- 仅 KMDF将 IRP 的 IoStatus.Status 成员设置为NT_SUCCESS (状态) 等于 FALSE 的状态值,如果回调函数检测到错误, (调用 IoCompleteRequest) 返回相同的值。
- 仅 KMDF如果回调函数调用 IoMarkIrpPending,则返回STATUS_PENDING。
注解
EvtDeviceWdmIrpDispatch 回调函数应仅用于为 IRP 选择特定队列。 为此,驱动程序从回调函数中调用 WdfDeviceWdmDispatchIrpToIoQueue 方法。
如果在此回调函数中检查 IRP 后,驱动程序不知道如何调度 IRP,驱动程序可以调用 WdfDeviceWdmDispatchIrp 将 IRP 返回到框架进行默认处理。
UMDF 驱动程序必须从此回调函数调用 WdfDeviceWdmDispatchIrp 或 WdfDeviceWdmDispatchIrpToIoQueue 。 KMDF 驱动程序具有其他选项,即不调用两者,而是完成 IRP 或将其标记为挂起。
若要注册 EvtDeviceWdmIrpDispatch 回调函数,驱动程序必须调用 WdfDeviceConfigureWdmIrpDispatchCallback。
在其 EvtDeviceWdmIrpDispatch 回调函数中,驱动程序不应设置完成例程。 如果需要完成例程,KMDF 驱动程序可以提供 EvtDeviceWdmIrpPreprocess 回调函数,而不是 EvtDeviceWdmIrpDispatch。
有关在 IRP 到达时指定队列的详细信息,请参阅 将 IRP 调度到 I/O 队列。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
最低 KMDF 版本 | 1.11 |
最低 UMDF 版本 | 2.17 |
标头 | wdfdevice.h (包括 Wdf.h) |
IRQL | <=DISPATCH_LEVEL |