该结构体为框架队列对象的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是可用的,即从队列中传递给DriverWdfIoQueueDispatchManual:Framework负责将Request输入队列,但不会分发给Driver,Driver通过WdfIoQueueRetrieveNextRequest来手动获取Request(3)PowerManaged:WdfTrue:Framework负责处理队列的电源管理;位于电源策略所有者上面的Driver,必须设置PowerManaged为WdfTrueWdfFalse: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。