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安装方式都成功但是执行时无任何反映, ...
随机推荐
- Spring Boot学习——Spring Boot简介
最近工作中需要使用到Spring Boot,但是以前工作中没有用到过Spring Boot,所以需要学习下Spring Boot.本系列笔记是笔者学习Spring Boot的笔记,有错误和不足之处,请 ...
- MySQL冗余数据的三种方案
一,为什么要冗余数据 互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量. 水平切分会有一个patition key,通过patition key的查询能够直接定位到库,但是非pa ...
- LeetCode OJ-- Surrounded Regions **@
https://oj.leetcode.com/problems/surrounded-regions/ 棋盘类的题目.找出所有没有被 X 包围的 O 使用深搜,但是太深了,run time erro ...
- Android TextView 中实现部分文字变色以及点击事件
首先要想实现文字变色以及点击,都需要使用到SpannableStringBuilder,实例化该类也很简单,只需将你想要处理的字符串当做参数 SpannableStringBuilder spanna ...
- Jave工具——servlet+jsp编程中mysql数据库连接及操作通用工具类
该工具类是在JavaWeb中连接mysql所用到的通用工具类 该类用于Java+Servlet的编程中,方便数据库的操作,连接,获取其列表值.下面是这个数据库操作类的通用方法,基本上能够用于类里面只含 ...
- jeesite导入数据库错误:java.sql.SQLException: Incorrect string value: '\xE4\xB8\xAD\xE5\x9B\xBD' for column 'name' at row 1问题解决
如果使用mvn antrun:run -Pinit-db进行数据库导入导致出现如下错误: 解决方法: 这个是由于新建数据库没有选择默认字符集导致的,只要选择utf-8即可.
- getenv, _wgetenv
Description The C library function char *getenv(const char *name) searches for the environment strin ...
- 【freeCodeCamp】免费晋级前台工程师呦!!!!
首页地址:https://www.freecodecamp.org/ GitHub:https://github.com/freeCodeCamp/freeCodeCamp ============= ...
- MVC4 Task.Factory.StartNew 异步调用
MVC4也添加了一些异步的东西,不过一枝都没有研究过. 工作上遇到了发出一个调用,但是不去管调用结果如何的情况,在谢平师傅的指导下, 写成如下异步方式 Task.Factory.StartNew(() ...
- EasyMvc入门教程-高级控件说明(20)表格控件
表单与表格是信息化系统里很常见的控件,EasyMvc提供了简单的数据绑定方式(基于Json),看下面的示例: 准备的接口地址代码如下:(该接口适用以下所有例子) public IActionResu ...