WdfDeviceConfigureRequestDispatching 函数 (wdfdevice.h)

[适用于 KMDF 和 UMDF]

WdfDeviceConfigureRequestDispatching 方法会导致框架将指定类型的 I/O 请求排队到指定的 I/O 队列。

语法

NTSTATUS WdfDeviceConfigureRequestDispatching(
  [in] WDFDEVICE        Device,
  [in] WDFQUEUE         Queue,
  [in] WDF_REQUEST_TYPE RequestType
);

参数

[in] Device

为框架设备对象提供句柄。

[in] Queue

为框架队列对象提供句柄。

[in] RequestType

提供 WDF_REQUEST_TYPE类型枚举器,用于标识要排队的请求的类型。 唯一有效的枚举器是:

WdfRequestTypeCreate

WdfRequestTypeRead

WdfRequestTypeWrite

WdfRequestTypeDeviceControl

WdfRequestTypeDeviceControlInternal

返回值

如果作成功,该方法将返回STATUS_SUCCESS。 其他返回值包括:

返回代码 描述
STATUS_INVALID_PARAMETER
输入参数无效。
STATUS_INSUFFICIENT_RESOURCES
可用内存量过低。
STATUS_WDF_BUSY
驱动程序已将队列分配给指定的请求类型。
 

此方法可能会返回其他 NTSTATUS 值

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

言论

每次调用 WdfDeviceConfigureRequestDispatching 指定一个请求类型。 如果希望单个 I/O 队列接收多种类型的请求(例如读取和写入请求),驱动程序可以针对单个 I/O 队列多次调用 WdfDeviceConfigureRequestDispatching

有关 WdfDeviceConfigureRequestDispatching的详细信息,请参阅 创建 I/O 队列管理 I/O 队列

例子

下面的代码示例初始化 WDF_IO_QUEUE_CONFIG 结构,创建 I/O 队列,然后配置队列,以便接收写入请求。

WDF_IO_QUEUE_CONFIG queueConfig;
WDFQUEUE WriteQueue;

WDF_IO_QUEUE_CONFIG_INIT(
                         &queueConfig,
                         WdfIoQueueDispatchSequential
                         );
queueConfig.EvtIoWrite = MyEvtIoWrite;
status = WdfIoQueueCreate(
                          Device,
                          &queueConfig,
                          WDF_NO_OBJECT_ATTRIBUTES,
                          &WriteQueue
                          );
if(!NT_SUCCESS(status)) {
    return status;
}
status = WdfDeviceConfigureRequestDispatching(
                                              Device,
                                              WriteQueue,
                                              WdfRequestTypeWrite
                                              );
if(!NT_SUCCESS(status)) {
    return status;
}

要求

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

另请参阅

WDF_IO_QUEUE_CONFIG_INIT

WdfIoQueueCreate