Windows驱动程序开发基础(四)驱动的编译调试和安装
Windows驱动程序开发基础,转载标明出处:http://blog.csdn.net/ikerpeng/article/details/38793995
以下说一下开发出来驱动程序以后怎样编译。一般有以下几种方式:
1. 建立Makefile文件,用nmake工具进行编译和链接。
2. 建立Makefile,sources, dirs文件。用build工具编译。
3. 用集成开发环境进行编译链接。
我採用的是第三种方式,通过VS2010+wdk配置Windows驱动程序开发环境。地址: http://blog.csdn.net/ikerpeng/article/details/38761441
可是接下来要说的是那样配置的部分原因:
编译函数的过程中有4种调用约定:c语言调用约定:函数用_cdecl修饰;标准调用约定:函数用_stdcall 修饰。高速调用约定:函数用_fastcall 修饰;C++类成员函数调用约定:函数用 thiscall 修饰。
当中的前两种是经经常使用到的。
c语言调用约定中。会在目标文件里产生一个符号来取代这个函数:下划线+函数名的形式;而标准调用约定的形式是:下划线+函数名+@X,同一时候返回X。当中X代表须要清理堆栈是须要的数字。比如:
Windows驱动程序须要使用到标准调用约定。对于DriverEntry函数。系统会寻找_DriverEntry@8作为驱动程序的入口。可是VS2010默认的是C语言调用约定。所以仅仅存在_DriverEntry,因此调用的时候就会出错。所以要将C/C++中的调用设置为_stdcall 修饰。
Tips:
1. 非常多C/C++的的使用技巧都要谨慎的使用,甚至C语言中的malloc函数和C++中new操作都不要使用。由于在内核模式下。程序无法调用用户模式以下的API。
2. 最后安调试驱动程序能够使用:DbgView,装驱动能够使用DriverMonitor。
本小节完。
參考书籍:
《Windows驱动开发技术具体解释》
Windows驱动程序开发基础(四)驱动的编译调试和安装的更多相关文章
- Windows 10开发基础——文件、文件夹和库(一)
原文:Windows 10开发基础--文件.文件夹和库(一) 主要内容: 1.枚举查询文件和文件夹 2.文本文件读写的三种方法——创建写入和读取文件 3.获得文件的属性 枚举查询文件和文件夹 先了解一 ...
- windows下mongodb基础玩法系列一介绍与安装
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
- WindowsNT设备驱动程序开发基础
一.背景介绍 1.1WindowsNT操作系统的组成1.1.1用户模式(UserMode)与内核模式(KernelMode) 从Intel80386开始,出于安全性和稳定性的考虑,该系列的CPU可以运 ...
- Windows移动开发(四)——闭关修炼
非常久不写博客了,不是由于不想写,仅仅是近期公司任务比較多,最终十一有时间出来冒泡了. 今天继续介绍移动开发中的重中之重--内存管理. C#代码是托管代码,C# 程序猿非常少像C/CPP程序猿那样为程 ...
- 第十七章:Python の Web开发基础(四) MVC与Django
本課主題 MVC 介绍 Django 介紹 MVC 介绍 controllers 处理用户请求 views 放置HTML模版 models 操作数据库 MVC框架就是目录的归类 MVC 是一种软件开发 ...
- Windows 10开发基础——网络编程
主要内容: HttpClient类 Socket通信 WCF通信 HttpClient类 在UWP中可以用来进行网络通信的HttpClient类有两个,System.Net.Http.Htt ...
- Windows 10开发基础——VS2015 Update1新建UWP项目,XAML设计器无法加载的解决
这次,我们来解决一个问题...在使用Visual Studio 2015 Update 1的时候,新建一个UWP的项目,XAML设计器就会崩,具体异常信息如下图: 解决方法如下:下面圈出的那个路径就按 ...
- Windows 10开发基础——XML和JSON (二)
主要内容: Linq to XML Newtonsoft.Json.Linq来解析JSON 博客园RSS(http://www.cnblogs.com/rss)的解析 UWP调用自己实现的Web AP ...
- Windows 10开发基础——XML和JSON (一)
主要内容: JSON的序列化与反序列化 XML的序列化与反序列化 1.JSON的序列化与反序列化 JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,它 ...
随机推荐
- 利用JS动态生成隔行换色HTML表格
用JS生成动态生成表格,行.列由用户输入,并使表格隔行换色 方法一. 代码: <!DOCTYPE html> 2 <html> 3 <head> 4 <tit ...
- POJ-1328-放置雷达
这是一道贪心的题目,首先我们要知道,我们放置雷达的话我们可以做一个转换,就是已知岛屿的点坐标的时候,我们可以算一下,这个点以d为半径与x轴交点之间的线段在x轴上的投影,然后我们只需要在这个投影范围内设 ...
- JDBC-Web项目导入mysql驱动包路径-Eclipse & Myeclipse
初学JAVA,很多都不懂,开始听老师说导入数据库驱动包的时候是: 右键项目 -> Properties -> Java Build Path -> 右侧选项卡选择Libraries ...
- 用python做分布式定时器
分布式任务系统 (Python) github地址 https://github.com/thomashuang/Lilac/blob/master/README.rst 这里将介绍Liac的设计架构 ...
- 准备新的代码迁移到cnblogs
http://www.cnblogs.com/danghuijian/ http://www.cnblogs.com/danghuijian/
- STM32F407 STLINK 在线调试 个人笔记
配置的部分请看本博客STM32分类下的环境配置篇目 开始调试 一些按键 查看寄存器 查看变量值 选中变量,右键,add to watch
- Relocation(状压DP)
Description Emma and Eric are moving to their new house they bought after returning from their honey ...
- BZOJ 3039: 玉蟾宫【dp】
Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地.这片土地被分成N*M个格子,每个格子里写着'R'或者' ...
- 禁止ScrollView在子控件的布局改变时自动滚动的的方法
重写scrollview中的如下方法,并将其返回值设为0即可. @Override protected int computeScrollDeltaToGetChildRectOnScreen(Re ...
- 【BZOJ1237】配对(贪心,DP)
题意:有n个a[i]和b[i],调整顺序使abs(a[i]-b[i])之和最小,但a[i]<>b[i].保证所有 Ai各不相同,Bi也各不相同. 30%的数据满足:n <= 104 ...