编写如下代码:
运行会报错:
这里的原因是有没有引用到的形参,需要添加如下代码即可:
记得在系统启动时按F8禁用掉数字签名:
将编译好的驱动拖入虚拟机,以管理员身份运行DbgView捕捉内核态输出数据,以管理员身份运行InstDrv以加载驱动,我们就可以看到启动和停止时,DriverEntry和DriverUnload中输出的数据了:
下面,来对上面的实验进行简单的说明:
Windows驱动程序的入口函数并不是main函数,而是DriverEntry函数,这个函数由内核中的I/O管理器负责调用。参数pDriverObject是I/O管理器传递进来的驱动对象;参数pRegistryPath是驱动程序在注册表中的路径。
I/O管理器的作用:
I/O管理器在内存中创建一个IRP来代表一个I/O操作,传递一个指向IRP的指针到正确的驱动程序,当此I/O操作完成时再处理该请求包。相反地,驱动程序接收一个IRP,执行该IRP指定的操作,然后将IRP传回给I/O管理器,这是因为:所请求的I/O操作已经完成,或者必须将其传给另一个驱动程序以作进一步处理。
I/O管理器也提供一些对于不同驱动程序都通用的代码,
例如,I/O管理器提供了这样一个功能:允许一个驱动程序调用其它驱动程序。它也为I/O请求管理缓冲区、为驱动程序提供超时支持、记录下哪些可安装的文件系统被加载到操作系统中。在I/O管理器中有将近100个不同的例程可供设备驱动程序调用。
原文:http://www.cnblogs.com/predator-wang/p/5510501.html