WdfIoQueueReadyNotify 函数 (wdfio.h)

[适用于 KMDF 和 UMDF]

WdfIoQueueReadyNotify 方法注册(或取消注册)事件回调函数,该函数框架每次为空的指定 I/O 队列每次接收一个或多个 I/O 请求时都会调用该函数。

语法

NTSTATUS WdfIoQueueReadyNotify(
  [in]           WDFQUEUE               Queue,
  [in, optional] PFN_WDF_IO_QUEUE_STATE QueueReady,
  [in, optional] WDFCONTEXT             Context
);

参数

[in] Queue

框架队列对象的句柄。

[in, optional] QueueReady

指向驱动程序提供的 EvtIoQueueState 回调函数的指针(如果驱动程序正在注册就绪通知);如果驱动程序正在取消注册,则 NULL

[in, optional] Context

框架传递给 EvtIoQueueState 回调函数的驱动程序提供的上下文信息的非类型化指针,如果驱动程序正在注册就绪通知,或 NULL(如果驱动程序正在取消注册)。

返回值

如果作成功,WdfIoQueueReadyNotify 将返回STATUS_SUCCESS。 否则,此方法可能会返回以下值之一:

返回代码 说明
STATUS_INVALID_PARAMETER
驱动程序提供了无效句柄。
STATUS_INVALID_DEVICE_REQUEST
如果出现以下情况之一,则返回此值:
 

此方法还可以 返回其他NTSTATUS 值。

如果驱动程序提供无效的对象句柄,则会发生 bug 检查。

注解

在驱动程序调用 WdfIoQueueReadyNotify 以注册 EvtIoQueueState 回调函数后,框架会在指定的队列的状态从空更改为非空时调用回调函数。 具体而言,框架在请求到达空队列时调用 EvtIoQueueState,即使驱动程序仍拥有以前从尚未完成的队列传递的请求。 可以通过在队列创建时在 WDF_OBJECT_ATTRIBUTES 中指定 ExecutionLevel 来修改回调运行所在的 IRQL。 有关详细信息,请参阅EVT_WDF_IO_QUEUE_STATE的“备注”部分。

当指定的队列停止时,框架不会调用 EvtIoQueueState。 队列启动时,如果队列不为空,框架将调用 EvtIoQueueState

驱动程序只能针对使用 手动调度 方法的 I/O 队列调用 WdfIoQueueReadyNotify

EvtIoQueueState 回调函数通常调用 WdfIoQueueRetrieveNextRequestWdfIoQueueRetrieveRequestByFileObject,以检索自上次执行回调函数以来到达的所有请求。

若要阻止框架调用 EvtIoQueueState 回调函数,驱动程序必须再次调用 WdfIoQueueReadyNotify,并将 QueueReady 参数设置为 NULL。 但是,驱动程序必须首先调用 WdfIoQueueStopWdfIoQueueStopSynchronously 来停止 I/O 队列。 驱动程序随后可以调用 WdfIoQueueStart 以重启队列。

当驱动程序调用 WdfIoQueueReadyNotify 注册 EvtIoQueueState 回调函数时,框架可以在 WdfIoQueueReadyNotify 返回之前调用回调函数。

有关 WdfIoQueueReadyNotify 方法的详细信息,请参阅 I/O 请求的调度方法

例子

下面的代码示例注册驱动程序的 EvtIoQueueReady 函数,以便在指定的 I/O 队列收到 I/O 请求时调用此函数。

Status = WdfIoQueueReadyNotify(
                               ReadQueue,
                               EvtIoQueueReady,
                               myQueueContext
                               );

要求

要求 价值
目标平台 普遍
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
标头 wdfio.h (包括 Wdf.h)
图书馆 Wdf01000.sys(KMDF):WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 DriverCreate(kmdf)KmdfIrql(kmdf)KmdfIrql2(kmdf),KmdfIrqlExplicit(kmdf)

另请参阅

EvtIoQueueState

WDF_IO_QUEUE_CONFIG

WdfIoQueueRetrieveNextRequest

WdfIoQueueRetrieveRequestByFileObject