WDF_IO_QUEUE_CONFIG解析

来源:互联网 发布:primo软件下载 编辑:程序博客网 时间:2024/04/29 22:22

该结构体为框架队列对象的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:EvtIoReadEvtIoWriteEvtIoDeviceControl:EvtIoInternalDeviceControlEvtIoStop:EvtIoResumeEvtIoCanceledOnQueue
相应Event的Callback 函数
(7)NumberOfPresentedRequests
对于Parallel分发,该值表明framework可以处理的IO Request最大数目

 

该结构体是通过WDF_IO_QUEUE_CONFIG_INIT或WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE来初始化,并最终由WdfIoQueueCreate调用来创建特定设备上的IO Queue。

 
 
 
 

 

原创粉丝点击