cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1304回复:6

创建IRP时的StackSize的问题?

楼主#
更多 发布于:2005-03-07 19:38
Filemon中获取文件名时是创建了一个IRP_MJ_QUERY_INFORMATION的IRP来完成的。函数为IoAllocateIrp(DeviceObject->StackSize,FASLE);那么在这层的过滤驱动向下层发送Irp时,此时创建的Irp的StackSize是否大于该Irp将走过的驱动层次呢?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2005-03-09 08:50
Filemon中获取文件名时是创建了一个IRP_MJ_QUERY_INFORMATION的IRP来完成的。函数为IoAllocateIrp(DeviceObject->StackSize,FASLE);那么在这层的过滤驱动向下层发送Irp时,此时创建的Irp的StackSize是否大于该Irp将走过的驱动层次呢?

对,不然你在IOCALLDRIVER的时候会BUGCHECK的......
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-09 09:17
如果是由I/O管理器创建的IRP,其StackCount是目标设备的StackSize+1。这点没错。
我的意思是,假设filemon之下有2个驱动,filemon之上又attach了两个驱动,那么目标设备对象的StackSize应是5。而此时在filemon中创建的IRP用5作参数的话,该IRP向下层传递时只经过2个驱动,这样是不是会出错呢?或者我的理解有没有错误?
aasa2
驱动中牛
驱动中牛
  • 注册日期2004-04-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分525分
  • 威望339点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-10 08:06
我也很想知道 :)
技术交流:aasa2@21cn.com QQ群:10863699
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-13 18:03
ding!
tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
5楼#
发布于:2005-03-14 05:52
大于了又怎么样呢
不会出错的

不记得有个叫IoSkipCurrentIrpStackLocation的宏了么
他不是就能抵消掉IoCallDriver作的减法操作么
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-03-14 16:00
系统会自己调用IoSkipCurrentIrpStackLocation这个么?如果这样造成堆栈单元和处理该IRP的驱动程序不一致怎么办呢?
游客

返回顶部