当前位置: 代码迷 >> 驱动开发 >> 关于startIO例程的简单有关问题
  详细解决方案

关于startIO例程的简单有关问题

热度:59   发布时间:2016-04-28 11:01:57.0
关于startIO例程的简单问题
最近在学习startIO例程,遇到了一些问题:
书上说想将irp串行化,只需要加入IoStartPacket函数,而IoStartPacket函数中调用了StartIO例程,StartIO例程中又调用了IoStartNextPacket函数,而IoStartNextPacket函数中又调用了StartIO例程...这里是用了递归方法么?看得好迷糊.


此外,不知道Tail.Overlay.DeviceQueueEntry是什么东东?
它出现在如下代码中:
PKDEVICE_QUEUE_ENTRY p = KeRemoveDeviceQueue(&device->DeviceQueue);
PIRP Irp = CONTAINING_RECORD(p,IRP,Tail.Overlay.DeviceQueueEntry);
(PS:第二个参数为什么不是KDEVICE_QUEUE结构而是IRP尼?)

谢谢指点!


------解决方案--------------------
没用过startIO。

StartNextPacket函数是不是在上一个IRP完成之后才会被调用?这样的话,就是每一个IRP完成之后,在完成例程里面都会启动一个新的IRP请求,实现不间断的IRP序列。

DeviceQueue是一个Queue类型的数据结构,里面的内容是IRP.

  相关解决方案