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 驱动入门(二)代码结构的更多相关文章

  1. 一个微服务+DDD(领域驱动设计)的代码结构示例

    前有幸拜读过诸多大神关于DDD的实现落地等文章,学习较多,受益匪浅,在此推荐 : https://www.cnblogs.com/hafiz/p/9388334.htmlhttps://blog.cs ...

  2. 1.windows编程入门MessageBox使用 -windows编程

    引言:刚开始入门windows编程的时候,我记得当时我对MFC的给出的一大堆代码感到束手无策.因为历史的缘故,windows编程入门的代码并没有体现出C++语言的简洁性,相反一上来就给了我们一大堆代码 ...

  3. linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)【转】

    本文转载自:https://blog.csdn.net/radianceblau/article/details/73498303 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...

  4. windows 驱动开发入门——驱动中的数据结构

    最近在学习驱动编程方面的内容,在这将自己的一些心得分享出来,供大家参考,与大家共同进步,本人学习驱动主要是通过两本书--<独钓寒江 windows安全编程> 和 <windows驱动 ...

  5. Windows驱动开发入门指引

       1.  前言 因工作上项目的需要,笔者需要做驱动相关的开发,之前并没有接触过相关的知识,折腾一段时间下来,功能如需实现了,也积累了一些经验和看法,所以在此做番总结. 对于驱动开发的开发指引,微软 ...

  6. Windows Azure入门教学系列 (二):部署第一个Web Role程序

    本文是Windows Azure入门教学的第二篇文章. 在第一篇教学中,我们已经创建了第一个Web Role程序.在这篇教学中,我们将学习如何把该Web Role程序部署到云端. 注意:您需要购买Wi ...

  7. 《Three.js 入门指南》3.1.2 - 一份整齐的代码结构以及使用ORBIT CONTROLS插件(轨道控制)实现模型控制

    3.1.2 正式代码结构 & ORBIT CONTROLS插件(轨道控制) 说明 本节内容属于插入节,<Three.js入门指南>这本书中,只是简单的介绍了一些概念,是一本基础的入 ...

  8. C++第三十八篇 -- 研究一下Windows驱动开发(二)--WDM式驱动的加载

    基于Windows驱动开发技术详解这本书 一.简单的INF文件剖析 INF文件是一个文本文件,由若干个节(Section)组成.每个节的名称用一个方括号指示,紧接着方括号后面的就是节内容.每一行就是一 ...

  9. 2016最新 wamp2.5+windows 10安装CoedSgniffer代码格式检查:5分钟安装 30分钟入门和浏览常用命令

    14:59 2016/1/112016最新 wamp2.5+windows 10安装CoedSgniffer代码格式检查:注意问题:1.手动安装2.5.0和pear安装方式都成功但是执行时无任何反映, ...

随机推荐

  1. XPath语法 在C#中使用XPath例子与用法

    XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识.示例Xml: <?xml version="1.0" enc ...

  2. jquery -----简单分页

    <!DOCTYPE html> <head> <title>无标题页</title> <script src="javsscript/j ...

  3. AC日记——石子归并 51nod 1021

    石子归并 思路: 经典动态规划——归并类问题: 我们把状态划为n个,即1-n的n个长度为n个状态: 那么,每个长度为i的状态都可以由i-1个长度为i-1的状态推出: 所以,dp转移方程: dp[i][ ...

  4. AC日记——[HNOI2007]紧急疏散evacuate bzoj 1189

    [HNOI2007]紧急疏散evacuate 思路: 处理每个人到门的最短路: 然后二分答案: s向人连边流量1: 人向门拆分后的点连边流量1(拆成400,前一个点连当前点流量INF): 然后门向t连 ...

  5. Chrome 75 将原生支持图片懒加载

    4 月 6 日,Google 的 Chrome & Web 平台工程经理 Addy Osmani 在个人博客发文,介绍到 <img> 和 <iframe> 的 load ...

  6. Nowcoder Girl 参考题解【待写】

    [官方题解]:https://www.nowcoder.com/discuss/65411?toCommentId=1134823 [题目链接]:https://www.nowcoder.com/te ...

  7. 大型网站优化-memcache技术

    大型网站优化-memcache技术 memory+cache 内存缓存 memcache简介 memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发 ...

  8. Spoj MKTHNUM - K-th Number

    题目描述 English Vietnamese You are working for Macrohard company in data structures department. After f ...

  9. IntelliJ IDEA关闭代码自动补全

    关闭代码自动补全之后,可以使用[Ctrl]+[P]进行强制调出提示. [Editor]-[Code Completion]页里有个[Case sensitive completion],可以设置只第一 ...

  10. hdu1874最短路

    裸裸的最短路问题,将while(scanf("%d%d", &N, &M)!=EOF)粗心写为while(scanf("%d%d", & ...