Windows驱动中的队列
来源:互联网 发布:mac如何下载美服lol 编辑:程序博客网 时间:2024/05/17 05:57
今天还好!可以很早下班,而且主要是不太忙了,所以以后要加紧更新了!希望今年可以对windows驱动做个很好的总结。
今天想介绍下,跟IRP也非常相关的队列。这里只简单介绍下,后续还会修改。我们知道在WDM驱动模型中,我们的IRP,需要排队,因为一下无法处理那么多的IRP,怎么办了,那就需要队列。队列的对象一般放在我们的设备扩展中。这里一般我们还会用到两个函数IoStartPacket,IoStartNextPacket,还有一个驱动对象的域DriverObject->DriverStartIo,一般来说,我们会在majorfunction的函数指针指向的函数,首先处理IRP,在后面我们调用IoStartPacket,再然后,我们直接调用XxxStartIo例程,或者直接把IRP排进队列中。一般来说,我们会在创建设备对象时,初始化队列,调用KeInitializeDeviceQueue ,KeInsertDeviceQueue or KeInsertByKeyDeviceQueue 来插入队列。我们来看MSDN中的图:
我们再来看WDF中的队列对象的操作。一般在WDF中,我们调用WdfIoQueueCreate来创建和配置队列。函数如下:
当然,我们要看一下,这个WDF_IO_QUEUE_CONFIG参数,按照老路子,肯定是通过宏来初始化其参数,再对参数赋值,再用这些配置的队列参数来创建队列。
NTSTATUS WdfIoQueueCreate( IN WDFDEVICE Device, IN PWDF_IO_QUEUE_CONFIG Config, IN OPTIONAL PWDF_OBJECT_ATTRIBUTES QueueAttributes, OUT WDFQUEUE* Queue );
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_START 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; } WDF_IO_QUEUE_CONFIG, *PWDF_IO_QUEUE_CONFIG;
看到这个我们会会心的一笑,原来在这里,所有的IRP的函数指针都在这里。这里我们用WDF_IO_QUEUE_CONFIG_INIT 或者WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE,来初始化这个队列属性,之所以有两个宏,那是因为,WDF认为电源处理队列是默认的队列,如果我们需要自己处理电源管理事件,我们就需要用WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE,其它的时间,我们使用WDF_IO_QUEUE_CONFIG_INIT.
- Windows驱动中的队列
- Windows驱动中的队列
- 学习windows驱动(队列)
- Windows驱动中的驱动对象
- linux驱动中的工作队列
- Windows驱动中的IRP
- Windows驱动中的Request
- Windows驱动中的资源
- Windows驱动中的IoTarget
- Windows驱动中的中断
- linux驱动中的等待队列头
- Windows驱动中的设备对象
- Windows 驱动中的IO堆栈
- Windows驱动中的电源管理
- Windows驱动中的inf文件
- Windows驱动中的Crash回调
- Windows驱动中的Crash回调
- Windows 驱动中的IO堆栈
- POJ 3735 Training little cats 矩阵二分幂 + 矩阵优化
- Linux设备驱动程序第三版学习(5)- 高级字符驱动程序操作 - ioctl .
- 命名空间
- C++误区之重载
- IT软件创业之 -- 小软件项目也有风险、也会失败、也会损兵折将
- Windows驱动中的队列
- hdu 1229 还是A+B
- 图片控件ImageView
- Oracle几种查找和删除重复记录的方法总结
- linux 服务
- hdu 1829 并查集
- 第二周JAVA上机实验(三)猜数游戏
- 关于#pragma push_macro("new")
- POJ 1185 炮兵阵地 最2的错误出现了