Windows 驱动入门(二)代码结构

windows驱动程序基础,转载标明出处:http://blog.csdn.net/ikerpeng/article/details/38777641

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 <NTDDK.h>
#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 驱动开发技术详解 》

你可能感兴趣的:(windows,驱动开发)