Windows驱动开发的环境搭建以及helloworld程序运行~
还是写个文档记下来,免得一段时间不用又忘了。。~
参考链接:
http://www.mycode.net.cn/language/cpp/1771.html
http://blog.csdn.net/silvervi/article/details/6014619
https://www.mobibrw.com/2014/1404
开发环境搭建
一、开发及测试环境
开发机系统 : win10, 64位
测试机系统: win10 或者 win7, 64位
开发软件: visual stdio 2015, (vs2017不支持,反正目前官网上是这么说的)
二、安装相应的开发软件
官方开发软件下载链接:
https://developer.microsoft.com/zh-cn/windows/hardware/windows-driver-kit
按照官网的教程:
- 安装 vs2015, 其中community是免费的,我直接安装这个版本了,反正功能够用~。
打开的时候记得安装Visual C++选项,
此处可以不选“通用Windows应用开发工具”中的SDK,因为可以从下面的步骤中手动安装。
- 安装 Windows SDK, 直接从官网指定的链接下载安装就行;
- 安装 Windows WDK, 同样直接从官网指定的链接下载安装;
记得安装的SDK 和 WDK 的版本号必须完全相同,所以我选择SDK和WDK都从官网给的链接上下载安装,避免vs2015中安装的SDK和自己下载的WDK版本不同。
当然WDK和SDK下下来的时候是个执行文件,打开后可以选择直接安装或者近下载,反正都行,我选择先下载下来,后面自己安装,比较这么大软件下一次太久~~
我记得WDK安装的时候会提示什么将无法开发现代应用程序之类的提示,直接接受并继续~~,其实对其他程序开发有什么影响我也不太清楚,反正我这个环境只开发windows驱动程序而已。
helloworld程序
一、新建驱动程序
打开VS2015,新建一个空的KMDF项目,如下图所示:
然后在Source Files中新建代码文件 DriverEntry.c,
记得是C文件,不是C++文件,目测C++文件库存在一些区别,编译会出一些问题。
代码如下:
|
|
二、修改项目属性
1.警告等级:
将警告等级改为3;将警告视为错误改为否;
2.修改目标平台属性;
这个属性决定你生成的程序在什么平台上运行;
此处我的测试机器是win7 64位。
3.关闭签名
4.关闭inf2cat
接着点击生成项目~
在目标机器上运行
1.重启虚拟机,开机时按F8,关闭强制签名认证;
2.安装必要的软件
将生成的.sys文件拷贝到目标机器;
下载一个InstDrv.exe,用来加载驱动程序;
下载一个Dbgview.exe,用来显示驱动的log;
两个程序都放在测试的机器里。
3.用admin权限打开Dbgview.exe程序,监控系统log;
进行一下配置:
开启Capture Kernel
连接到本地机器
4.用Admin权限打开InstDrv.exe,并选择拷贝进来的.sys文件;
点击安装、启动,就可以在gdbview.exe里看到相应的log了。
点击停止、卸载,一样看到log。
如果没有出现log信息,win7系统可尝试修改下系统配置重试:
打开注册表HKLM/SYSTEM/CurrentControlSet/Control/Session Manager,打开或者创建子项Debug Print Filter,然后新建一个DWORD值DEFAULT,将其设置成0xF,重启即可。
其他
1.驱动签名
到这里,基本开发环境和测试环境都可以了,helloworld也运行通了。
这里其实关闭win7的强制签名机制,在测试时还是可能遇到很多崩溃的问题,其实可以通过进行测试签名来解决这些问题,过程也很简单,参考链接:https://qwertwwwe.github.io/2017/08/11/Windows%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91-%E6%B5%8B%E8%AF%95%E8%AF%81%E4%B9%A6%E7%AD%BE%E5%90%8D/
如果要正式发布驱动程序,让其可以在任意计算机上安装执行,则需要购买证书,个人版大概几百RMB一年吧~~
2.驱动加载
目前的加载驱动用这个InstDrv.exe不是很方便,其实我后来看到的一些程序,基本都不用这么加载,直接右键安装,然后在cmd里启动就行了,这个和驱动类型有关;
3.Samples学习
微软给出了各种类型的驱动samples,拿来学习很好用,参考链接:
https://github.com/Microsoft/Windows-driver-samples