该结构体为框架队列对象的Config信息。具体如下所示:
typedef struct _WDF_IO_QUEUE_CONFIG {
ULONG Size;
WDF_IO_QUEUE_DISPATCH_TYPE DispatchType;
WDF_TRI_STATE PowerManaged;
BOOLEAN AllowZeroLengthRequests;
BOOLEAN DefaultQueue;
PFN_WDF_IO_QUEUE_IO_DEFAULT EvtIoDefault;
PFN_WDF_IO_QUEUE_IO_READ EvtIoRead;
PFN_WDF_IO_QUEUE_IO_WRITE EvtIoWrite;
PFN_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtIoDeviceControl;
PFN_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl;
PFN_WDF_IO_QUEUE_IO_STOP EvtIoStop;
PFN_WDF_IO_QUEUE_IO_RESUME EvtIoResume;
PFN_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE EvtIoCanceledOnQueue;
union {
struct {
ULONG NumberOfPresentedRequests;
} Parallel;
} Settings;
} WDF_IO_QUEUE_CONFIG, *PWDF_IO_QUEUE_CONFIG;
(1)Size : 该结构体的大小; (2)DispatchType : 该队列的Request分发类型: WdfIoQueueDispatchSequential:直到Driver调用WdfRequestComplete,框架才会从队列中取出下一个Request。 WdfIoQueueDispatchParallel:只要该Request是可用的,即从队列中传递给Driver WdfIoQueueDispatchManual:Framework负责将Request输入队列,但不会分发给Driver,Driver通过 WdfIoQueueRetrieveNextRequest来手动获取Request (3) PowerManaged: WdfTrue:Framework负责处理队列的电源管理;位于电源策略所有者上面的Driver,必须设置PowerManaged为WdfTrue WdfFalse:Driver负责处理队列的电源管理 WdfDefault:除非Driver调用WdfFdoInitSetFilter,其余情况由Framework处理队列的电源管理 (4) AllowZeroLengthRequests: 为True,则表明Driver期待接收到零长度Buffer的读或写Request;否则,Framework不会将这些Request传递给Driver (5)DefaultQueue: 表明该队列是设备的默认IO队列。 (6)EvtIoDefault: EvtIoRead: EvtIoWrite: EvtIoDeviceControl:EvtIoInternalDeviceControl :EvtIoStop:EvtIoResume:EvtIoCanceledOnQueue: 相应Event的Callback 函数 (7)NumberOfPresentedRequests : 对于Parallel分发,该值表明framework可以处理的IO Request最大数目
该结构体是通过WDF_IO_QUEUE_CONFIG_INIT或WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE来初始化,并最终由WdfIoQueueCreate调用来创建特定设备上的IO Queue。