用Visual Studio 2015 编译张帆的第一个WDM驱动,并且成功安装到Windows 10里面!!!
开发工具:Visual Studio 2015 企业版
目 标 机:Windows 10 X86
前提:我们已经成功安装了Visual Studio 2015以及WDK,而且更重要一点是一定要SDK版本和WDK版本保证一致,如果不一致会造成Visual Studio 2015里面C/C++的宏定义和使用的WDK不匹配,严重影响驱动程序的编译!关于这个问题,可以看这篇文章:http://www.cnblogs.com/sunylat/p/6286527.html
本篇博客涉及到的所有工具和源码下载:http://download.csdn.net/detail/sunylat/9740132
在进行下列操作之前,请到上面地址下载所有本博客涉及到的所有工具和源码,随后进行下面尝试!!
一,驱动安装和调试工具准备:把压缩包里面的下面两个工具拷贝到虚拟机中。
1,EzDriverInstaller,这个工具直接运行就可以了。
2,DbgView,在使用它之前,注意“DebugView”目录中有一个"1.reg"文件,执行它,随后重新启动操作系统,从而保证DbgView能够捕获驱动信息,否则无法捕获驱动信息!
二,编译张帆的第一个WDM工程:我采用建立一个空白的WDM工程,随后拷贝张帆WDM工程代码方式来完成,这样最大限度保证工程代码的正确性,从而可能保证我们顺利编译通过!!
1,"新建项目"->Visual C++->Leguay->"Empty WDM Driver",选择好工程路径,输入工程名称为“HelloWDM”,随后点击“确定”按钮。

2,拷贝张帆第一个WDM工程里面的3个文件到我建立的工程中。在拷贝时候“HelloWDM.inf”需要覆盖,直接覆盖就可以了!!

3,点击VS2015菜单“生成”->“重新生成 HelloWDM”,第一次尝试编译这个工程。

4,编译结果发现错误,错误提示是一个指令配置错误,打开“HelloWDM.inf”,在它“Version”小节中加入“CatalogFile=HelloWDM.cat”,随后保存这个文件。

5,继续编译,依然存在错误,解决方法:关闭C++的“将警告视为错误”。

6,鼠标右键点击工程“属性”,随后点击“C/C++”,关闭C++的“将警告视为错误”。

7,继续尝试编译,依然发现错误,这次我们将关闭inf2Cat。

8,鼠标右键点击工程“属性”,inf2Cat,把“Run Inf2Cat”选择为“否”,随后点“确定”按钮。

9,继续编译,VS2015提示编译驱动成功!!那么我们就去目标机里面试一下安装我们编译成功的驱动吧!

二,去目标机里面测试驱动:把我们编译好的驱动拷贝到虚拟机里面。
1,首先用管理员权限打开“Dbgview.exe”,随后选择它菜单“Capture”,选中“Capture Kernel”,这样我们才能得到驱动的调试信息!
2,打开“EzDriverInstaller.exe”,点击“File”,在弹出对话框中选择我们要安装的驱动程序,实际上是选择那个"HelloWDM.inf"文件,WDM驱动安装都是选择这个inf开始。

3,点击“Add New Device”按钮。

4,添加操作结束了,实际上这次安装失败了,因为“EzDriverInstaller”界面中,并没有显示出来我们要安装的驱动!

5,这是最终安装操作结束后的界面。

6,我们看“Dbgview”中没有任何驱动相关的调试信息!

三,继续修改驱动程序相关文件:
1,修改“HelloWDM.inf”:驱动安装失败了,应该是我们编写的驱动程序什么地方有问题了,经过多次排查,最终发现是“HelloWDM.inf”的一项设置的问题!!在“SourceDisksFiles”这个小节中!
原来配置:
HelloWDM.sys = 1,MyDriver_Check,
修改后配置
HelloWDM.sys = 1,,
最终修改完“HelloWDM.inf”的截图:

2,把重新编译好的驱动拷贝到目标机中。

3,重新用“EzDriverInstaller”安装这个WDM驱动,这次“EzDriverInstaller”最终显示我们真的安装成功了,“EzDriverInstaller”里出现了这个WDM驱动了,并且“Dbgview”里面显示了整个驱动完整的调试信息!!

4,我们通过设备管理器,也真的看到了,我们成功安装的张帆的第一个WDM驱动了!!

以上就是经过我3天不懈努力,无数次蓝屏最终完成的成果!!!张帆的《windows驱动开发技术详解》,从出版到最终的第三次印刷,到目前为止,依然是国内学习驱动非常好的图书,如果不谦虚地说,应该是首屈一指的图书,非常系统全面介绍驱动开发相关知识,其它驱动开发图书,真的没法和它比!!!但是随着时间推移,当时的开发环境已经过时了,目前VS2015是微软一个非常强大的开发工具,同时也是驱动开发的好工具,能够使用VS2015,并且还能够编译和安装张帆的例子,无疑是最好的学习方式,我这些天一直在努力,最终我完成了!!!希望大家能够在学习驱动的时候,踩着我的肩膀前进,比我更幸福些!!!
四,如何编译其它平台的驱动:鼠标右键工程”属性“->Driver Settings,随后选择目标OS和平台就可以了!

下面是win7 X86平台成功安装驱动的截图:

目前编译驱动均为X86平台!!
参考文章:http://blog.csdn.net/whatday/article/details/9384577
用Visual Studio 2015 编译张帆的第一个WDM驱动,并且成功安装到Windows 10里面!!!的更多相关文章
- 用Visual Studio 2015 编译张帆的第一个NT式驱动,并且成功安装到Windows XP里面!!!
开发工具:Visual Studio 2015 企业版 目 标 机:Windows XP X86 前提:我们已经成功安装了Visual Studio 2015以及WDK,而且更重要一点是一定要SDK版 ...
- Visual Studio 2015 编译错误 File 的值+乱码的解决方法
======================================== VS2015调试项目时,会报莫名奇妙的错误,如下图所示: 程序编译,提示有错误:Visual Studio 2015 ...
- (win10 64位系统中)Visual Studio 2015+OpenCV 3.3.0环境搭建,100%成功
(win10 64位系统中)Visual Studio 2015+OpenCV 3.3.0环境搭建,100%成功 1.下载opencv 官网http://opencv.org/下载windows版Op ...
- Visual Studio 2015编译安装配置QT5.5.1(含QTWEBKIT)
尽管QT5.5.1和VisualStudio 2015都已经发布很久了,但是QT项目组视乎不会为QT5.5.1专门发布预编译的QT5.5.1 for windows(2015)版本的,也不会专门发布V ...
- Visual Studio 2015编译wxWidgets
宫指导说,换帅如换刀 程序员的编译器一换,基本套路必须都重练几次 使用wxWidgets并不难,但不能使用现有的库和工程配置文件,细节就必须理清楚 获取wxWidgets 官方的下载页面,下7z或zi ...
- QT5.7.0在win10下使用visual studio 2015编译(目标平台 xp)
环境:win10+vs2015+QT5.7.0 目标:编译出能在windows xp上运行的QT 通过baidu和bing找出来的结果没有一个能成功运行,大部分都能编译成功,并完美解决“exe不是有效 ...
- Visual Studio 2015 编译错误【错误 C4996 'vsprintf': This function or variable may be unsafe. Consider using vsprintf_s instead. 】的解决方案
错误提示信息: 错误 C4996 'vsprintf': This function or variable may be unsafe. Consider using vsprintf_s inst ...
- Visual Studio 2015编译Lua 5.3.4遇到的坑
被坑的不浅,遇到错误:" LNK1561:必须定义入口点",解决方案删除再建,步骤一遍一遍操作,还是报错.如下图所示: 首先,它必须要改成DLL或者LIB(动态/静态库),如果是应 ...
- 使用 Visual Studio 2015 编译 QT 工程
简单进行一下几步就可以了 1.下载源代码 qt-everywhere-opensource-src-5.6.0-alpha.7z .解压到 D:\ToolKits\5.6.0\src 目录下2.网站 ...
随机推荐
- js 操作数组的一些方法
1.从数组中获取最大的数 function getMaxfromarr(arr) { var lasti = 0; for (var i = 0; i < arr.length; i++) { ...
- Sunday
字符串匹配中最简单的算法: 基本思路:wandderwonder wonder 建立256个长的next数组,记录每个字符最后一次出现的位置. 设mark1 = 0: 和 mark2 = 0:flag ...
- css实现类似heigth:100%的方法
1. 效果 2. 代码 2.1. Html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...
- Unity 导出NavMesh (可行走区域判定) 数据给服务器使用
cp790621656 博客专家 Unity 导出NavMesh (可行走区域判定) 数据给服务器使用 发表于2016/9/26 18:15:11 1089人阅读 分类: Unity MMO 这个 ...
- ios crash log
1.IOS策略 1.1 低内存闪退 前面提到大多数crash日志都包含着执行线程的栈调用信息,但是低内存闪退日志除外,这里就先看看低内存闪退日志是什么样的.我们使用Xcode 5和iOS 7的设备模拟 ...
- jQuery代码在移动端不运行
今天写了个html网页发现在iOS系统上边不运行,于是真机连上Sarfari查看报错,于是乎 其实这是由于iOS的安全策略决定的,不允许加载非https的连接 报错:was not allowed t ...
- 钉钉开发笔记(5)android系统中html软键盘的适配
最近项目中发现个别Android手机中存在弹出的软键盘会遮挡输入框的现象,最后自己写了一个方法(如下),问题基本解决. 记录下来,防止忘记.有什么不对的地方欢迎指正.O(∩_∩)O 1 //键盘适配 ...
- CSS中的元素分类
CSS中的元素分类 元素是文档结构的基础,在CSS中,每个元素生成了一个包含了元素内容的框(box,也译为"盒子").但是不同的元素显示的方式会有所不同,例如<div> ...
- 【小前端】float属性
要求 需要float的元素,必须指定一个width宽度 没了 然后就可以指定 float:right 什么的了
- LSP(分层服务提供程序)
一.简介 LSP即分层服务提供商,Winsock 作为应用程序的 Windows 的网络套接字工具,可以由称为"分层服务提供商"的机制进行扩展.Winsock LSP 可用于非常广 ...