一、驱动程序层次结构
在《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