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(status) 等于 TRUE 的另一个状态值,并在回调函数成功完成收到的 IRP 后(调用 IoCompleteRequest后)返回相同的值。
  • KMDF

    如果回调函数检测到错误,请将 IRP IoStatus.Status 成员设置为 NT_SUCCESS等于 FALSE 的状态值,并返回相同的值(调用 IoCompleteRequest后)。
  • KMDF

    如果回调函数调用 IoMarkIrpPending,则返回STATUS_PENDING。

言论

EvtDeviceWdmIrpDispatch 回调函数只能用于为 IRP 选择特定队列。 为此,驱动程序从回调函数中调用 WdfDeviceWdmDispatchIrpToIoQueue 方法。

如果在检查此回调函数中的 IRP 后,驱动程序不知道如何调度 IRP,驱动程序可以调用 WdfDeviceWdmDispatchIrp 将 IRP 返回到框架进行默认处理。

UMDF 驱动程序必须从此回调函数调用 WdfDeviceWdmDispatchIrpWdfDeviceWdmDispatchIrpToIoQueue。 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

另请参阅

WdfDeviceConfigureWdmIrpDispatchCallback

WdfDeviceWdmDispatchIrp

WdfDeviceWdmDispatchIrpToIoQueue