windows 驱动程序结构:
我想说的是 windows 驱动程序的结构和 C++ 的程序结构是一样的,在你知道这一点以后你就会认为简单了很多。
首先在一个头文件中面做一些必要的预处理。然后定义会用到的设备扩展结构体(相当于 Class);接下来就是函数的声明。
当这一切结束以后,我们就在. cpp 文件中面实现这些函数。可是不一样的地方要说一下:
1. 这里声明的结构体是用来存储设备的信息的。
2. 声明的函数在结构体外面,为了和 C 兼容要使用 extern"c";
3. 声明的函数一般来说分为,函数的入口(相当于 main 函数),设备创建函数。设备的卸载 3 个部分。
以下我们来看一下作者书里面的样例:(备注,最后几行是我 iker 对比作者的两个样例以后加上的)
- #001
- /**************************************************************#002 * 文件名:Driver.h #003 * 作 者:张帆#004 * 完毕日期:2007-11-1#005 ************************************************************/
- #006 #pragma once#007 #008 #ifdef __cplusplus#009 extern "C"#010 {#011 #endif#012 #include#013 #ifdef __cplusplus#014
- }#015 #endif#016 #017 #define PAGEDCODE code_seg("PAGE")#018 #define LOCKEDCODE code_seg()#019 #define INITCODE code_seg("INIT")#020
- 021 #define PAGEDDATA data_seg("PAGE")
- #022 #define LOCKEDDATA data_seg()#023 #define INITDATA data_seg("INIT")#024 #025 #define arraysize(p) (sizeof(p)/sizeof((p)[0]))#026 以上是预编译处理:导入了NT驱动须要的头文件。兼容到C++语言,另一些宏定义
- #027 typedef struct _DEVICE_EXTENSION {#028 PDEVICE_OBJECT pDevice;#029 UNICODE_STRING ustrDeviceName; //设备名称#030 UNICODE_STRING ustrSymLinkName; //符号链接名#031 } DEVICE_EXTENSION, *PDEVICE_EXTENSION;#032 #033 // 函数声明#034 #035 NTSTATUS CreateDevice (IN PDRIVER_OBJECT pDriverObject);//这里是声明创建一个设备的函数
- #036 VOID HelloDDKUnload(IN PDRIVER_OBJECT pDriverObject); //这里是声明一个卸载驱动的函数#037 NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj,#038 IN PIRP pIrp);//这里是声明一个默认派遣的函数#039
- #040 extern "C"#041 NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,#042 IN PUNICODE_STRING RegistryPath);
- //这里是定义函数的入口,相当于main函数
接下来就是在. cpp 文件中面实现这几个函数,大家应该也非常清楚了,就不再赘述!
參考:
http://book.51cto.com/art/200807/79760.htm
《 Windows 驱动开发技术具体解释 》
来源: http://www.bubuko.com/infodetail-2045227.html