ch609
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分196分
  • 威望29点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1015回复:0

这句话理解不了,那位大哥帮帮忙

楼主#
更多 发布于:2007-04-14 20:27
"IRP中的第一个堆栈单元指针被初始化成指向该堆栈单元之前的堆栈单元,因为I/O堆栈实际上是IO_STACK_LOCATION结构数组,你可以认为这个指针被初始化为指向一个不存在的“-1”元素,因此当我们要初始化第一个堆栈单元时我们实际需要的是“下一个”堆栈单元。IoCallDriver将沿着这个堆栈指针找到第0个表项,并提取我们放在那里的主功能代码,在上例中为IRP_MJ_Xxx。然后IoCallDriver函数将利用DriverObject指针找到设备对象中的MajorFunction表。IoCallDriver将使用主功能代码索引这个表,最后调用找到的地址(派遣函数)。"

书中的这句话是什么意思???
假设有三层驱动程序:顶层过滤驱动程序(对应FiDo), 设备驱动程序(-FDO),总线驱动程序(-PDO);则应该有三个IO堆栈单元iostack[3];

问题1:
IO堆栈单元有什么用?
问题2:
如果我在第一层FiDo创建一个IRP,情况是怎么样的?在第二层FDO创建一个IRP情况又是怎么样的?
问题3:
假如上面两种情况的IRP都希望是由PDO处理,那我在IoCallDriver中第一个参数应该是FDO吧,但是可以是PDO吗?我在第二种情况下应该设置PDO吧?
游客

返回顶部