IWDFDevice::CreateIoQueue 方法(wudfddi.h)
[警告: UMDF 2 是最新版本的 UMDF,取代了 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 没有将新功能添加到 UMDF 1,并且对较新版本的 Windows 10 上的 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。 有关详细信息,请参阅 UMDF入门 。]
CreateIoQueue 方法配置与设备关联的默认 I/O 队列,或为设备创建辅助 I/O 队列。
语法
HRESULT CreateIoQueue(
[in, optional] IUnknown *pCallbackInterface,
[in] BOOL bDefaultQueue,
[in] WDF_IO_QUEUE_DISPATCH_TYPE DispatchType,
[in] BOOL bPowerManaged,
[in] BOOL bAllowZeroLengthRequests,
[out] IWDFIoQueue **ppIoQueue
);
参数
[in, optional] pCallbackInterface
指向框架用来确定驱动程序在队列上订阅的事件回调函数的事件回调函数的 IUnknown 接口的指针。 这些是框架在发生相关事件时调用的函数。
对于 UMDF 版本 1.9 及更高版本,对于使用顺序或并行 调度方法的 I/O 队列,此参数是必需的, 并且对于使用手动调度方法的 I/O 队列(可以为 NULL)可选。 对于低于 1.9 的 UMDF 版本,所有调度方法都需要此参数。
[in] bDefaultQueue
一个 BOOL 值,该值指定是配置默认 I/O 队列,还是为设备创建辅助 I/O 队列。 TRUE 指示配置默认 I/O 队列;FALSE 指示创建辅助 I/O 队列。
[in] DispatchType
一个 WDF_IO_QUEUE_DISPATCH_TYPE类型的值,该值标识驱动程序如何从 I/O 队列接收请求。
[in] bPowerManaged
一个 BOOL 值,该值指定 I/O 队列是否受电源管理。 TRUE 指示框架使用即插即用(PnP)和设备的电源状态自动协调 I/O 队列的调度;FALSE 表示没有自动协调调度。
[in] bAllowZeroLengthRequests
一个 BOOL 值,该值指定框架是否直接将零长度的 I/O 请求放入 I/O 队列中,以便驱动程序进行处理。 TRUE 指示驱动程序应接收具有零长度缓冲区的读取和写入请求,即框架会自动将这些请求类型直接置于驱动程序的 I/O 队列中。 FALSE 表示框架完成零长度的 I/O 请求,而不是将它们放入 I/O 队列中。
[out] ppIoQueue
指向一个变量的指针,该变量接收指向新创建的 I/O 队列对象或默认 I/O 队列对象的 IWDFIoQueue 接口的指针。
返回值
CreateIoQueue 返回以下值之一:
返回代码 | 描述 |
---|---|
|
已成功创建 I/O 队列。 |
|
I/O 队列通过以下方式之一进行配置:
|
CreateIoQueue 也可能返回其他 HRESULT 值。
言论
驱动程序为 pCallbackInterface 参数提供的 IUnknown 接口可以支持多个队列回调函数。 该框架多次在提供的 IUnknown 接口上调用 QueryInterface 方法,以检索驱动程序支持的接口方法。 当应用程序执行与受支持接口的方法(例如 I/O 读取请求)相关的作时,框架将调用方法(例如,IQueueCallbackRead::OnRead 方法)来通知驱动程序。 框架针对以下接口调用 QueryInterface:
IQueueCallbackDefaultIoHandler
当驱动程序传递 WdfIoQueueDispatchSequential 或 WdfIoQueueDispatchParallelCreateIoQueue 的 DispatchType 参数以创建非manual 队列时, CreateIoQueue 仅当驱动程序的队列回调对象实现上述至少一个接口并指示通过 pCallbackInterface 指向的 IUnknown 接口支持此类接口时,才能返回S_OK。
当驱动程序通过 WdfIoQueueDispatchManual for DispatchType 创建手动队列时,CreateIoQueue 仅当驱动程序的队列回调对象未实现或指示对上述任何回调接口的支持时,才能返回S_OK。 有关驱动程序回调对象的详细信息,请参阅 创建回调对象。
该框架还对提供的 IUnknown 接口调用 QueryInterface,以确定驱动程序是否支持以下任何接口:
该框架还对提供的 IUnknown 接口调用 QueryInterface,以确定驱动程序是否支持 IQueueCallbackStateChange 接口。 驱动程序的队列回调对象可以选择实现并指示仅支持手动队列的 IQueueCallbackStateChange。 驱动程序的队列回调对象不能实现并指示对顺序队列或并行队列 IQueueCallbackStateChange 的支持。
例子
有关如何使用 CreateIoQueue 方法的代码示例,请参阅 IWDFDriver::CreateDevice。
要求
要求 | 价值 |
---|---|
终止支持 | 在 UMDF 2.0 及更高版本中不可用。 |
目标平台 | 桌面 |
最低 UMDF 版本 | 1.5 |
标头 | wudfddi.h (包括 Wudfddi.h) |
DLL | WUDFx.dll |