驱动程序层次结构、PIRP结构、IO_STACK_LOCATION结构

本文探讨了Windows驱动程序的层次结构,包括DriverEntry、MajorFunction、PIRP和IO_STACK_LOCATION结构。PIRP结构体包含IRP请求类型、用户缓冲区信息以及处理结构。IO_STACK_LOCATION是I/O堆栈单元,对应设备对象,每个设备对象都有一个IO_STACK_LOCATION结构。驱动程序层次结构分为水平和垂直关系,水平关系涉及多个设备对象,垂直关系涉及PDO、FDO和FiDO,其中PDO是底层,FDO在PDO之上,而FiDO可以位于FDO的上下。驱动程序的创建顺序是先创建PDO,然后创建FDO和过滤驱动。
摘要由CSDN通过智能技术生成

一、驱动程序层次结构

 

在《Windows驱动开发详解》的第四章简单介绍了一下驱动程序的层次结构,但介绍得不清不楚,反复看了几遍,仍然是一分清楚,九分糊涂。为此,花了几个小时来查阅相关资料,最后分别参考《Windows驱动开发详解》和《Windows操作系统原理第2版》,才算有了个初步的认识。

 

要想详细解释驱动程序的层次结构,以我现在的水平可能还没那个能力,但或许能通过文字的形式让自己多一分认识。

 

1.再看DriverEntry和HelloDDKDispatchRoutine函数

要想理解驱动程序的层次结构,还得再来看看第一个驱动程序的大致流程。我们知道,驱动程序的入口函数是DriverEntry,而在DriverEntry函数中,对DRIVER_OBJECT结构体进行了初始化。其中MajorFunction成员是用来设置IRP对应的派遣函数,这样使用该驱动程序进行不同的I/O请求时,就会相应相应的派遣函数。下面是DriverEntry函数中对MajorFunction成员的初始化设置:

 

pDriverObject->MajorFunction[IRP_MJ_CREATE] = ( PDRIVER_DISPATCH ) HelloDDKDispatchRoutine;
pDriverObject->MajorFunction[IRP_MJ_CLOSE] = ( PDRIVER_DISPATCH ) HelloDDKDispatchRoutine;
pDriverObject->MajorFunction[IRP_MJ_WRITE] = ( PDRIVER_DISPATCH ) HelloDDKDispatchRoutine;
pDriverO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值