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 驱动开发技术具体解释 》

时间: 2025-01-17 06:03:07

Windows 驱动入门(二)代码结构的相关文章

JSqlParser系列之二代码结构(原)

JSqlParser系列之二代码结构(原) 博客园 百味木屋原创,转载请注明出处. 上一篇文章简单介绍如何建立JSqlParser工程,本章对JSqlParser工程的代码结构作大致地介绍. 一.目录结构 JSqlParser的目录结构比较简单,主要有表达式,解析器,语句处理几个目录.下面这张图给出了一个具体的SQL语句与表达式: 接下来,简要介绍一下在JSqlParser中几个抽象概念. 二.SQL语句(statement) JSqlPaser将所有的SQL语句抽象为Statement,Sta

ReactNative入门(4)代码结构

一.了解index.ios.js 大家都清楚,React-Native就是在开发效率和用户体验间做的一种权衡.React-native是使用JS开发,开发效率高.发布能力强,不仅拥有hybrid的开发效率,同时拥有native app相媲美的用户体验.目前天猫也在这块开始试水. 用编辑器打开index.ios.js文件,分析代码结构: 1.第一句:var React = require('react-native');有Node.js开发经验的同学都清楚,require可以引入其他模块.如果没有

Android之高仿雅虎天气(二)---代码结构解析

版本已升级至1.0.1 源码地址: GitHub:https://github.com/way1989/WayHoo OsChina:http://git.oschina.net/way/WayHoo 本例使用了6个库代码和1个主工程代码. 一.6个库代码如下图所示: 其中 ①.MenuDrawer.ViewPagerIndicator.ShowcaseView.SwipeBack都是Github上有名的侧边栏菜单开源库,我这里未做修改,直接引用,感谢开源的力量. ②.PullToRefresh

Windows 驱动入门(一)

本博客为Windows驱动开发的基础.转载标明出处:http://blog.csdn.net/ikerpeng/article/details/38776407 一个简单的Windows驱动程序一般包括:头文件(决定NT,WDM:定义宏...),入口函数(相当于main),创建设备例程(相当于函数的实现),驱动的卸载,默认派遣. 知识点: 1. 两种驱动:NT和WDM:前者不支持即插即用:头文件分别是:NTDDK.h, WDM.h : 2.DriverEntry才是函数的入口,包括两个参数:pD

React-Native入门指南(二)——代码结构

React-Native入门指南 github:https://github.com/vczero/react-native-lession React-Native:用JavaScript开发你的原生应用,释放Native的UI体验,体验 Hybird开发效率. 最近一个星期写的文章如下: 第1篇hello react-native 第2篇认识代码结构 第3篇css和布局 第4篇学会react-native布局 第5篇ui组件 还有几篇需要这这周完成(这块会时刻更新): 第6篇JSX语法 第7

第二十二篇:再写Windows驱动,再玩Windbg---NET

2011年到现在,就没再怎么搞过Windows驱动了. 最近, 由于项目需要, 试着改一改一个显卡驱动(KMDOD), 从实践上证明, 我在理论上对一个驱动的架构的正确与否.(USB Display = KMDOD + AVStream). 其中, KMDOD是完成显示的部分功能, 完成其中的VidPN(Video present network), 将驱动中原来的POST物理设备转变为USB物理设备. 而AVStream之所以这样提出, 完成是由于USB Video class的启发, 要不然

Windows驱动开发(二)

本节主要介绍驱动开发的一些基础知识. 1. 驱动程序的基本组成 1.1. 最经常见到的数据结构 a. DRIVER_OBJECT驱动对象 [cpp] view plaincopy // WDK中对驱动对象的定义 // 每个驱动程序都会有一个唯一的驱动对象与之对应 // 它是在驱动加载时被内核对象管理程序创建的 typedef struct _DRIVER_OBJECT { CSHORT Type; CSHORT Size; // // The following links all of the

【转】Windows驱动开发如何入门

1.http://blog.csdn.net/charlessimonyi/article/details/50904854 (2016年03月16日 14:55:36) 2. 搞Windows驱动开发是一件痛苦的事情,特别是初学Windows驱动开发.有的人觉得Windows驱动开发就是把开发包WDK下载下来,然后只要掌握了C/C++语言,接下来无非就是类库调来调去,像调用MFC.QT之类的库那样,看着书和MSDN上的文档来就行了.等真正接触以后才发现根本不是那么一回事,痛苦源于以下几点: 痛

windows内核驱动中的链表结构

windows内核驱动中的链表结构与数据结构中的链表结构在构造上有很大不同,以循环双链表为例 数据结构中的链表结构: 数据就像集装箱,可以直接放置在火车上,而节点就像每节之间的挂接装置. 内核驱动中的链表结构: 数据就像车厢,自带挂接装置(节点) 1.链表结构体不同 数据结构中的链表结构,包含有节点和数据, struct DataList{ DataType data; struct DataList* next; struct DataList* prev; }; 驱动中的链表结构,仅包含有节