Windows 驱动入门(一)

本博客为Windows驱动开发的基础。转载标明出处:http://blog.csdn.net/ikerpeng/article/details/38776407


一个简单的Windows驱动程序一般包括:头文件(决定NT,WDM;定义宏。。。),入口函数(相当于main),创建设备例程(相当于函数的实现),驱动的卸载,默认派遣。


知识点:


1. 两种驱动:NT和WDM:前者不支持即插即用;头文件分别是:NTDDK.h, WDM.h ;


2.DriverEntry才是函数的入口,包括两个参数:pDriverObject(I/O管理器传过来的驱动对象),pRegistryPath(指向驱动负责的注册表);


3. 设备扩展结构体:负责补充定义设备的相关信息;


4.用#pragma INITCODE  将程序加载到INIT内存区域;INIT标志标明该程序成功加载后可以卸载


5.加入extern“c”才能保证用C++写的时候不会出错;


6.驱动程序会注册一些回调函数供操作系统调用(都在pDriverObject里面),通过指针的方式将地址告诉操作系统;


7. CreateDevice(pDriverObject)是一个帮助函数,辅助DriverEntry创建一个设备对象;

     构造一个Unicode字符串存储设备对象名称;

     IoCreateDevice创建设备对象;

     填写设备的扩展结构体;

     创建符号链接;()

     创建成功则返回,不成功则删除。


8.卸载驱动处理驱动被卸载时的情况:第一个设备对象的地址存储于DeviceObject域中,每一个设备对象中的NextDevice域记录着下一个设备对象的地址,这样形成一个链表,会用到:#pragma PAGEDCODE:

        由驱动对象得到设备对象;

删除设备对象的符号链接;

遍历设备对象,并删除。


9. 默认派遣中指定了对设备对象的创建,关闭和读写的操作,和IRP的状态有关。


参考书目:

《 Windows 驱动开发技术详解 》


Windows 驱动入门(一)

上一篇:Windows 驱动入门(二)代码结构


下一篇:ET vs2010中使用IrisSkin2.dll轻松实现winForm窗体换肤功能