创建 I/O 队列
2014-04-23 14:32
176 查看
转:创建 I/O 队列
- 评价此主题
大多数驱动程序都在其
EvtDriverDeviceAdd 回调函数中创建 I/O 队列。要为设备创建 I/O 队列,驱动程序会调用框架队列对象的
WdfIoQueueCreate 方法(该方法创建一个框架队列对象)。驱动程序为该方法提供一个
WDF_IO_QUEUE_CONFIG 结构。此结构中含有关于队列的配置信息,如在队列中存在请求时队列的调度方法,以及框架所调用的指向请求处理程序的指针。此结构还指示队列是否具有电源管理特性,以及驱动程序是否支持用于队列
I/O 请求的零长度缓冲区。
如果驱动程序将 WDF_IO_QUEUE_CONFIG 结构的 DefaultQueue 成员设为 TRUE,那么队列将成为设备的默认 I/O 队列。如果驱动程序创建了一个默认 I/O 队列,那么框架会将设备的所有 I/O 请求都放到此队列中,除非您还另外创建了接收其中某些请求的队列。驱动程序通过调用
WdfDeviceGetDefaultQueue 方法,可以获取至设备默认 I/O 队列的句柄。
如果想在一台设备上使用一个以上的 I/O 队列,则驱动程序可以调用 WdfIoQueueCreate 根据需要创建任意多数量的队列对象。如果一个驱动程序创建了多个队列,那么它可以调用
WdfDeviceConfigureRequestDispatching,来指示框架将不同类型的请求定向到不同的队列。例如,您可以指定将所有读取请求传递到一个队列,而所有写入请求传递到另一个队列。
如果您的驱动程序创建了一组 I/O 队列,并调用了 WdfDeviceConfigureRequestDispatching 将其所能收到的各种类型的请求分别定向到特定队列,那么该驱动程序不需要默认队列。
如果驱动程序没有为特定类型的请求提供 I/O 队列,并且您的驱动程序是功能驱动程序,那么框架完成该类型的请求时完成状态值为 STATUS_INVALID_DEVICE_REQUEST。如果驱动程序为筛选器驱动程序并已调用
WdfFdoInitSetFilter,那么框架会自动将这些请求转发至驱动程序堆栈中的下一层驱动程序。因此,例如,不处理读取请求的筛选器驱动程序就不必提供接收读取 I/O 请求的队列。
有关驱动程序如何才能使用 I/O 队列的示例,请参见
I/O 队列使用示例。
创建 I/O 队列
1(共 1)对本文的评价是有帮助- 评价此主题
大多数驱动程序都在其
EvtDriverDeviceAdd 回调函数中创建 I/O 队列。要为设备创建 I/O 队列,驱动程序会调用框架队列对象的
WdfIoQueueCreate 方法(该方法创建一个框架队列对象)。驱动程序为该方法提供一个
WDF_IO_QUEUE_CONFIG 结构。此结构中含有关于队列的配置信息,如在队列中存在请求时队列的调度方法,以及框架所调用的指向请求处理程序的指针。此结构还指示队列是否具有电源管理特性,以及驱动程序是否支持用于队列
I/O 请求的零长度缓冲区。
如果驱动程序将 WDF_IO_QUEUE_CONFIG 结构的 DefaultQueue 成员设为 TRUE,那么队列将成为设备的默认 I/O 队列。如果驱动程序创建了一个默认 I/O 队列,那么框架会将设备的所有 I/O 请求都放到此队列中,除非您还另外创建了接收其中某些请求的队列。驱动程序通过调用
WdfDeviceGetDefaultQueue 方法,可以获取至设备默认 I/O 队列的句柄。
如果想在一台设备上使用一个以上的 I/O 队列,则驱动程序可以调用 WdfIoQueueCreate 根据需要创建任意多数量的队列对象。如果一个驱动程序创建了多个队列,那么它可以调用
WdfDeviceConfigureRequestDispatching,来指示框架将不同类型的请求定向到不同的队列。例如,您可以指定将所有读取请求传递到一个队列,而所有写入请求传递到另一个队列。
如果您的驱动程序创建了一组 I/O 队列,并调用了 WdfDeviceConfigureRequestDispatching 将其所能收到的各种类型的请求分别定向到特定队列,那么该驱动程序不需要默认队列。
如果驱动程序没有为特定类型的请求提供 I/O 队列,并且您的驱动程序是功能驱动程序,那么框架完成该类型的请求时完成状态值为 STATUS_INVALID_DEVICE_REQUEST。如果驱动程序为筛选器驱动程序并已调用
WdfFdoInitSetFilter,那么框架会自动将这些请求转发至驱动程序堆栈中的下一层驱动程序。因此,例如,不处理读取请求的筛选器驱动程序就不必提供接收读取 I/O 请求的队列。
有关驱动程序如何才能使用 I/O 队列的示例,请参见
I/O 队列使用示例。
相关文章推荐
- Android消息处理机制(二):循环和消息队列的创建
- linux INIT_WORK 创建工作队列
- ASIHttpRequest:创建队列、下载请求、断点续传、解压缩
- ASIHttpRequest:创建队列、下载请求、断点续传、解压缩
- 消息队列的创建与读写ftok,msgget,msgsnd,msgrcv,指令ipcs,ipcrm 查看,删除消息队列
- Rabbit MQ 的配置与队列自动创建
- 队列和栈的应用、单链表的创建、模拟链表
- 剑指offer——面试题23:从上往下打印二叉树(树的递归创建,广度优先搜索,队列)
- 创建自己的消息队列
- 标准容器map的使用(创建优先级队列)
- VIRTIO的vring收发队列创建流程
- redis创建消息推送队列
- 中序二叉树、队列实现层次遍历、中序线索二叉树的创建与遍历
- MSMQ消息通知系统之消息队列创建、发送、接收
- ASIHttpRequest:创建队列、下载请求、断点续传、解压缩
- 《数据结构和算法》之队列的创建、入列和出列
- spring boot rabbitmq 多MQ配置 自动 创建 队列 RPC
- [置顶] (java)IBM websphere MQ 通过PCF_CommonMethods在队列管理器中创建队列
- 进程中的标识符和键(ftok函数创建)(共享内存,消息队列,信号量用到的)
- 九、堆和优先队列---(1)创建堆