yxj727
驱动牛犊
驱动牛犊
  • 注册日期2001-06-15
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2222回复:2

IRP请求包中的堆栈单元怎么会有多个IO_STACK_LOCATION

楼主#
更多 发布于:2001-06-06 16:24
IRP请求包中的堆栈单元怎么会有多个IO_STACK_LOCATION,比如用IoBuildSynchronousFsdRequesT创建一个IRP,那他只能有一个
IO_STACK_LOCATION单元。

最新喜欢:

changbanpochangb...
abeh
驱动牛犊
驱动牛犊
  • 注册日期2001-04-10
  • 最后登录2003-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-06-10 17:47
据我理解:IRP可以沿着这个栈向下传递,完成以后再向上返回
我爱开发
KDriver
驱动中牛
驱动中牛
  • 注册日期2001-06-09
  • 最后登录2008-09-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-06-30 16:09
WDM下的驱动程序是分层的,你生成了一个IRP需要传到下层去,你就同时生成了几个IO_STACK_LOCATION,每个代表一个下层的驱动。

用来存放一些参数,比如MajorFunction。你可能会问,为什么一个包在不同层还要指定几次MajorFunction呀?YES,因为每个驱动程序都对一个IRP的功能可以做不同的解释。

比如,一个USB设备驱动程序受到了一个IRP_MJ_READ数据包。那么它需要吧它传到BUS DRIVER去,但它和BUS DRIVER的通信是通过DEVICEIOCONTROL接口来做的。于是它就可以修改这个MajorFunction为IRP_MJ_DEVICE_CONTROL,传到下面去。

你明白了吧???
“萎软”,是Microsoft的小名!
游客

返回顶部