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)
Library 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