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 驱动入门(二)代码结构的更多相关文章
- 一个微服务+DDD(领域驱动设计)的代码结构示例
前有幸拜读过诸多大神关于DDD的实现落地等文章,学习较多,受益匪浅,在此推荐 : https://www.cnblogs.com/hafiz/p/9388334.htmlhttps://blog.cs ...
- 1.windows编程入门MessageBox使用 -windows编程
引言:刚开始入门windows编程的时候,我记得当时我对MFC的给出的一大堆代码感到束手无策.因为历史的缘故,windows编程入门的代码并没有体现出C++语言的简洁性,相反一上来就给了我们一大堆代码 ...
- linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)【转】
本文转载自:https://blog.csdn.net/radianceblau/article/details/73498303 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...
- windows 驱动开发入门——驱动中的数据结构
最近在学习驱动编程方面的内容,在这将自己的一些心得分享出来,供大家参考,与大家共同进步,本人学习驱动主要是通过两本书--<独钓寒江 windows安全编程> 和 <windows驱动 ...
- Windows驱动开发入门指引
1. 前言 因工作上项目的需要,笔者需要做驱动相关的开发,之前并没有接触过相关的知识,折腾一段时间下来,功能如需实现了,也积累了一些经验和看法,所以在此做番总结. 对于驱动开发的开发指引,微软 ...
- Windows Azure入门教学系列 (二):部署第一个Web Role程序
本文是Windows Azure入门教学的第二篇文章. 在第一篇教学中,我们已经创建了第一个Web Role程序.在这篇教学中,我们将学习如何把该Web Role程序部署到云端. 注意:您需要购买Wi ...
- 《Three.js 入门指南》3.1.2 - 一份整齐的代码结构以及使用ORBIT CONTROLS插件(轨道控制)实现模型控制
3.1.2 正式代码结构 & ORBIT CONTROLS插件(轨道控制) 说明 本节内容属于插入节,<Three.js入门指南>这本书中,只是简单的介绍了一些概念,是一本基础的入 ...
- C++第三十八篇 -- 研究一下Windows驱动开发(二)--WDM式驱动的加载
基于Windows驱动开发技术详解这本书 一.简单的INF文件剖析 INF文件是一个文本文件,由若干个节(Section)组成.每个节的名称用一个方括号指示,紧接着方括号后面的就是节内容.每一行就是一 ...
- 2016最新 wamp2.5+windows 10安装CoedSgniffer代码格式检查:5分钟安装 30分钟入门和浏览常用命令
14:59 2016/1/112016最新 wamp2.5+windows 10安装CoedSgniffer代码格式检查:注意问题:1.手动安装2.5.0和pear安装方式都成功但是执行时无任何反映, ...
随机推荐
- HDU5036 Explosion(期望&&bitset)
#include <iostream> #include <cstring> #include <string> #include <vector> # ...
- Codeforces Gym100814 F.Geometry (ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology)
这个题真的是超级超级水啊,哈哈哈哈哈哈.不要被题面吓到,emnnn,就这样... 代码: 1 #include<iostream> 2 #include<cstring> 3 ...
- Codeforces 901C Bipartite Segments(Tarjan + 二分)
题目链接 Bipartite Segments 题意 给出一个无偶环的图,现在有$q$个询问.求区间$[L, R]$中有多少个子区间$[l, r]$ 满足$L <= l <= r &l ...
- luogu P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows
题目描述 Each of Farmer John's N (4 <= N <= 16) cows has a unique serial number S_i (1 <= S_i & ...
- redis--服务器与客户端
初始化服务器 从启动 Redis 服务器,到服务器可以接受外来客户端的网络连接这段时间,Redis 需要执行一系列初始化操作. 整个初始化过程可以分为以下六个步骤: 初始化服务器全局状态. 载入配置文 ...
- sublime的markdown插件
mac安装 shift+command+p调出package control面板,搜索install调查安装软件搜索面板 搜索需要安装markdown软件 我安装了下面两个:MarkdownLiveP ...
- ArcGIS教程:面积制表
摘要 计算两个数据集之间交叉制表的区域并输出表. 插图 使用方法 · 区域定义为输入中具有同样值的全部区.各区无需相连. 栅格和要素数据集都可用于区域输入. · 假设区域输入和类输入均为具有同样分辨率 ...
- 手机APP脚本录制(LoadRunner 12)
最近因项目需要,研究了下手机APP脚本录制方法,有需要的童鞋可参考使用! 方法1: 在手机网络中设置网络代理,使用LR12选择Mobile Application – HTTP/HTML协议中代理录制 ...
- Android 使用意图播放本地视频
Android播放视频的方式有三种: 一.使用意图播放,调用本地安装的播放器,选择一个进行播放. 二.使用VideoView播放(VideoView事实上是对MediaPlayer的封装,使用起来非常 ...
- 怎样mac上安装apk到连接数据线的手机
高大上的mac俺也用了一段时间了.不知道大家有木有同一个烦恼.曾经在win上的时候仅仅要安装了应用宝之类的手机助手.就能够双击APK,直接安装到连接数据线的手机上,非常方便哈,可是mac上不行.近期找 ...