今天还好!可以很早下班,而且主要是不太忙了,所以以后要加紧更新了!希望今年可以对windows驱动做个很好的总结。
今天想介绍下,跟IRP也非常相关的队列。这里只简单介绍下,后续还会修改。我们知道在WDM驱动模型中,我们的IRP,需要排队,因为一下无法处理那么多的IRP,怎么办了,那就需要队列。队列的对象一般放在我们的设备扩展中。这里一般我们还会用到两个函数IoStartPacket,IoStartNextPacket,还有一个驱动对象的域DriverObject->DriverStartIo,一般来说,我们会在majorfunction的函数指针指向的函数,首先处理IRP,在后面我们调用IoStartPacket,再然后,我们直接调用XxxStartIo例程,或者直接把IRP排进队列中。一般来说,我们会在创建设备对象时,初始化队列,调用KeInitializeDeviceQueue ,KeInsertDeviceQueue or KeInsertByKeyDeviceQueue 来插入队列。我们来看MSDN中的图:
我们再来