基础IRP 和I/O Stack location 的关系

本文详细阐述了IRP(I/O请求包)与IO堆栈位置(IO_STACK_LOCATION)之间的关系及其在驱动程序中的作用。介绍了这两种结构的定义,并解释了IO堆栈位置如何与IRP关联,以及它在设备栈中的排列方式。

   对于刚学驱动的人来说,或许对IRP和IO stack location的关系还有点不清楚。这里就说说他们之间的关系。具体IRP 和IO stack location相关知识,会在以后文章中说明。下面先放上IRP和IO stack location结构的定义。可惜的是IRP是半透明的。

 

 

 

 

 

 

 

IO manager每次构造一个IRP数据包时都会分配一个或多个IO stack location,具体的数量依赖于相应设备栈的多少。在IRP结构中有保存了当前IO stack location的索引。其实IO stack location的位置其实紧接着IRP之后的。或许IRP的最后一个域应该是IO_STACK_LOCATION  IoStackLocation[1],这只是我个人的猜测。这样做就可以很方便的得到指定的IoStackLocation了。既然是一个数组,可能有人会想到数组第一个应该就是在设备栈最顶端的设备了,其实不然,数组第一其实是最后一个。为什么这么做呢,我有在一本书上看到是说为了检测IoStackLocation的位置,在最后一个是预留使用,当检查到最后一个是0的时候,可以说已经到了能出来这个IRP的最低端了。这种做法可能防止访问异常的问题。集合看一下wrk中的代码,就会清晰一点了。IO stack Location中才保存了当前需要进行的操作类型,参数等信息。需要做文件系统驱动的人,肯定是更为的要熟悉这一结构了。

    简单的说,IRP总是和IO stack Location在一起的,不管从位置布局上,还是从功能使用上。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值