彻底弄明白IRP(转载)

彻底弄明白IRP(转载)


官方解释:

  引用:

1.   子系统调用NT的IO系统服务打开命名文件。

2.   NT的IO管理器调用对象管理器,查询命名文件,并且帮助解决文件对象的符号连接。同时调用安全参照监视器,检查子系统是否具备打开文件句柄的正确权限。

3.   如果NT文件系统不认识文件对象,IO管理器挂起请求。调用多个文件系统直到识别出文件对象才继续请求。

4.   IO管理器负责为打开的请求分配内存和初始化IRP。对于NT驱动,打开请求等同于创建请求。

5.   IO管理器调用文件系统驱动,将IRP传递给它们。文件系统存取它们的IRP中本地IO栈,决定必须进行哪一种操作。检查参数,确定请求文件是否在缓存中。如果不是,设置下一个IRP中驱动的IO栈。

6.   无论是驱动处理IRP还是完成IO请求操作。都调用IO管理器和其它NT元素提供的核心态例程。

7.   驱动设置返回给IO管理器的IRP中的IO状态块表示请求操作是成功还是失败。

8.   IO管理器通过获取IRP中的IO状态,将信息同过保护子系统返回给原始调用者。

9.    IO管理器释放已完成的IRP。

10.   如果打开操作成功,IO管理器返回文件句柄给子系统。反之返回错误状态。

 上述解释看起来仍含含糊糊,于是网上找到了如下的比喻,甚觉形象的很,转载下载供大伙交流学习,不喜勿喷。

1.客人(IRP)来到大厦(驱动程序)外,该大厦有一个按人名造册的接待系统(IO管理器)。

2.客人(IRP)先到大厅,查花名册,按人名(设备对象DeviceObject,符号连接SymbolicLink)查。同时查安全薄,看这个人是不是恐怖分子、台独分子(STATUS_INVALID_DEVICE_REQUEST,SECURITY_CLIENT_CONTEXT),不是则被允许进入。如是,则不允许则禁入。

3. 如果查不到客人名,则拒绝进入。调用多本花名册(文件系统,FSD),直到识别出来人,才继续。

4.接待系统(IO管理器)为客人(IRP)分配房间、会议室,餐饮,一应俱全(RtlZeroMemory,RtlCopyMemory),并打扫一遍(初始化, KeSetEvent, KeWaitForSingleObject,IoMarkIrpPending, InitializeObjectAttributes)。

5.接待系统(IO管理器)调用管理人员,将客人的信息传递给下面各部门。各部门管理人员根据他们的子系统情况,分配资源队列(本地IO栈),并决定必须进行哪一种操作(IoGetCurrentIrpStackLocation,Irp->AssociatedIrp.SystemBuffer)。客人是否在不同级别的客人清单中。如果没有这个级别,则新建一个级别(DeviceObject->DeviceExtension),并进行登记。比如是国宾级,则一定要准备一个总统套间。

6. 不论是对于客人(Irp),还是客人的级别档次要求(IO栈),都使用模块化的规范流程。

7. 向大厦总经理报告人员进入、级别招待的请求是成功还是失败。

8.获取人员、招待的状态,将是不是超过招待能力的信息(过保护状态)返回给新来的客人。如果超出接待能力,则挂牌“客满,恕不接待”。

9.人员离开,则释放客人占有的所有资源(分配房间、会议室等)。IoCompleteRequest,DriverObject->DriverUnload,IoDeleteDevice, ZwClose

10.招待成功,返回OK或返回错误(Irp->IoStatus.Status = STATUS_SUCCESS,returnntStatus)

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值