对IRP知识总结(壹)(Windows内核学习笔记)

本文介绍了Windows内核中IRP(I/O Request Package)的工作原理,包括IRP与调度函数的关系,I/O堆栈位置的作用,以及IRP在设备栈中的转发机制。IRP在设备对象的MajorFunction数组中匹配调度函数,并通过IO_STACK_LOCATION记录不同层级的操作。IoCallDriver和IoSkipCurrentIrpStackLocation等函数用于IRP的转发和堆栈管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户模式下对所有驱动程序的I/O请求都会,全部由操作系统转化为一个叫做IRP(I/O Request Package)的数据结构,不同的IRP数据结构会被派遣到不同的派遣函数中进行请求的处理。
在一个驱动程序中对应的DriverObject中,有个函数指针数组MajorFunction,里面存放的是派遣函数的地址,通过这个数组,可以将IRP请求与对应的派遣函数关联起来。
接下来首先介绍一个重要的数据结构I/O堆栈,IO_STACK_LOCATION,这个数据结构和IRP紧密相连。每一个IRP都会被操作系统发送到设备栈的顶层,如果顶层设备对象的派遣函数结束了IRP请求,则这次I/O请求结束。如果没有将IRP的请求结束,那么操作系统将IRP转发到设备栈的下一层去设备处理,一直到IRP请求被设备对象处理,则停止向下转发。
因此一个IRP就可能被转发很多次,那么我们怎么记录这些操作和需要操作的数据呢?IRP中有一个IO_STACK_LOCATION数组,数组的元素应该大于IRP穿越过的设备数,每个IO_STACK_LOCATION元素记录着对应设备中做的操作。对于本层设备对应的IO_STACK_LOCATION,可以通过IoGetCurrentIrpStackLocation来得到。

#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KookNut39

感谢您请我喝咖啡哈哈哈哈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值