WdfDeviceConfigureWdmIrpDispatchCallback 函数 (wdfdevice.h)

[适用于 KMDF 和 UMDF]

WdfDeviceConfigureWdmIrpDispatchCallback 方法注册驱动程序的 EvtDeviceWdmIrpDispatch 回调函数。

语法

NTSTATUS WdfDeviceConfigureWdmIrpDispatchCallback(
  [in]           WDFDEVICE                      Device,
  [in, optional] WDFDRIVER                      Driver,
  [in]           UCHAR                          MajorFunction,
                 PFN_WDFDEVICE_WDM_IRP_DISPATCH EvtDeviceWdmIrpDispatch,
  [in, optional] WDFCONTEXT                     DriverContext
);

参数

[in] Device

框架设备对象的句柄。

[in, optional] Driver

驱动程序框架驱动程序对象的句柄,该驱动程序是从先前调用 WdfDriverCreateWdfGetDriver 获取的。 此参数是可选的。

[in] MajorFunction

以下 IRP 主要函数代码之一:IRP_MJ_DEVICE_CONTROL、IRP_MJ_INTERNAL_DEVICE_CONTROL、IRP_MJ_READ IRP_MJ_WRITE。

EvtDeviceWdmIrpDispatch

指向驱动程序的 EvtDeviceWdmIrpDispatch 回调函数的指针。

[in, optional] DriverContext

指向驱动程序定义的上下文信息的非类型化指针,框架会将该指针传递给驱动程序的 EvtDeviceWdmIrpDispatch 回调函数。 此参数是可选的,可以为 NULL。

返回值

如果 WdfDeviceConfigureWdmIrpDispatchCallback 方法未遇到任何错误,则返回STATUS_SUCCESS。 其他返回值包括:

返回代码 说明
STATUS_INVALID_PARAMETER
提供的 MajorFunction 值无效。
STATUS_INSUFFICIENT_RESOURCES
可用内存不足。

注解

驱动程序调用 WdfDeviceConfigureWdmIrpDispatchCallback 方法来注册 EvtDeviceWdmIrpDispatch 回调函数。 然后,框架在收到 I/O 请求数据包时调用 EvtDeviceWdmIrpDispatch , (IRP) 包含与此方法的 MajorFunction 参数匹配的 IRP 主函数代码。

驱动程序通常从其 EvtDriverDeviceAdd 回调函数调用 WdfDeviceConfigureWdmIrpDispatchCallback

必须为驱动程序要为其注册回调函数的每个 MJ 函数调用 一次 WdfDeviceConfigureWdmIrpDispatchCallback 。 换句话说,截获多个 MJ 函数需要多个调用。

驱动程序可能会出于以下原因调用 WdfDeviceConfigureWdmIrpDispatchCallback 方法:

  • 例如,若要检查 IRP 并根据特定于域的条件将其分配给特定队列,请将与文件对象关联的所有 I/O 定向到特定队列。
  • 若要根据单个请求进行选择,需要调用 EvtIoInCallerContext 回调函数。

有关在 IRP 到达时指定队列的详细信息,请参阅 将 IRP 调度到 I/O 队列

要求

要求
目标平台 通用
最低 KMDF 版本 1.11
最低 UMDF 版本 2.17
标头 wdfdevice.h (包括 Wdf.h)
Library Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 DriverCreate (kmdf)

另请参阅

EvtDeviceWdmIrpDispatch

WdfDeviceWdmDispatchIrp

WdfDeviceWdmDispatchIrpToIoQueue