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. java8 之CompletableFuture -- 如何构建异步应用

    什么是Future 接口 很多场景下,我们想去获取线程运行的结果,而通常使用execute方法去提交任务是无法获得结果的,这时候我们常常会改用submit方法去提交,以便获得线程运行的结果. 而sub ...

  2. python 设计模式之MVC模式

    一.简单介绍 mvc模式  the  model-view-controller pattern mvc模式是一个运用在软件工程中的设计模式.mvc模式脱离了以前简单的web服务设计逻辑,将开发,测试 ...

  3. CodeForces - 361D Levko and Array

    Discription Levko has an array that consists of integers: a1, a2, ... , an. But he doesn’t like this ...

  4. 多线程一共就俩问题:1.线程安全(访问共享数据) 2.线程通信(wait(),notify())

    多线程一共就俩问题:1.线程安全(访问共享数据) 2.线程通信(wait(),notify()) 1.线程安全,无非就是加锁,访问共享资源时,synchronized 2.线程通信,就是控制各个线程之 ...

  5. 终端应用变身文件 MD5/SHA1 校验工具

    担心下载的文件被恶意篡改?没有找到 Mac 平台文件校验工具?其实 Mac OS X 系统中已经内置了“文件 MD5/SHA1 校验工具”,它就藏身于终端(Terminal)应用中! 打开终端应用,输 ...

  6. 【lombok】lombok---帮你简化生成必要但臃肿的java代码工具 【映射注解和lombok注解同时使用 以及 映射注解放在属性和get方法上的区别】

    官方地址:https://projectlombok.org/ GitHub:https://github.com/rzwitserloot/lombok 指导说明文档:http://jnb.ociw ...

  7. iOS开发--从TQRichTextViewDemo中学会分析project

    下载地址: http://code4app.com/ios/TQRichTextView/5244fe9c6803fa0862000000 1.首先找到AppDelegate类.不管一个project ...

  8. Openfire 4.1.2 DOWNLOADS

    DOWNLOADS  Source Code Openfire 4.1.2 http://www.igniterealtime.org/downloads/ http://download.ignit ...

  9. 改用MyAnalyzer的KMeans聚类算法

    <strong><span style="font-size:18px;">/*** * @author YangXin * @info 改用MyAnaly ...

  10. Andfix热修复框架原理及源代码解析-上篇

    热补丁介绍及Andfix的使用 Andfix热修复框架原理及源代码解析-上篇 Andfix热修复框架原理及源代码解析-下篇 1.不知道怎样使用的同学,建议看看我上一篇写的介绍热补丁和Andfix的使用 ...