StackSize & CurrentLocation & StackCount & IopfCallDriver内部设置当前堆栈单元的代码

来源:互联网 发布:js获取div高度并赋值 编辑:程序博客网 时间:2024/04/28 16:20


StackSize:共几个IO空间:在每个设备对象中,有个StackSize子域,表明操作这个设备对象需要几层才能到达最下层的物理设备。(若共四个设备,最顶端的设备的StackSize  = 4,最底下的设备的StackSize  = 1      HighFiDO -> FDO -> LowFiDO ->PDO )

CurrentLocation :IRP头中的CurrentLocation字段初始化为StackCount+1

StackCount:除了本层外,下面还有几层




【原理】

 

1B设备的派遣函数:(位于DriverB.sys中)




2、IopfCallDriver内部:(位于DriverA.sys中)

 

irpSp = IoGetNextIrpStackLocation( Irp ); // B设备的派遣函数中通过IoGetNextIrpStackLocation获取并设置下层堆栈。而这里的IopfCallDriver也是内部通过IoGetNextIrpStackLocation也获取下层堆栈的指针。由于他俩所操作的IRP都是pNewIrp,所以IoGetNextIrpStackLocation返回的都是同一个IO堆栈单元。

Irp->Tail.Overlay.CurrentStackLocation = irpSp;//并设置到了pNewIrpp->Tail.Overlay.CurrentStackLocation中,这样到达A设备的派遣函数中时,通过windbg发现CurrentStackLocation指向的就是在设备B中设置的堆栈的指针

0 0
原创粉丝点击