勇哥注:
学习驱动开发的目的,是为运控和视觉程序构建一个实时环境。
这方面虽然有windows实时拓展的商业软件,但是价格贵得感人,特别是想实现一些简单实时需求的时候更不划算。
虽然驱动开发学习难度较大,但是我把目标放低,先研究一下怎么构建实时性较高的ns级订时器,并调用用户层代码,期望以此方式来应用需要实时的操作。
搭建win10、vs2022下的驱动开发环境
(1)先查看系统版本号
主要关注“版本号”和“内部版本”
注意,由于wdk的安装一定要跟windows版本号一样,所以如果你的系统版本号在下面的wdk 安装包网站找不到的话,需要升级系统补丁。
https://learn.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads
例如,你的系统是win10 1009,那就得进行系统长级了。
可以使用win10的自动更新,目前最新版本是win10 22h2
如果你的自动更新用不了,那也有办法,就是使用windows升级助手。
它的下载地址在:https://www.microsoft.com/zh-cn/software-download/windows10
直接运行,就可以帮你把win10升级到最新的22h2。
安装完成后重启电脑即可。
注意:安装这个可能会把你的系统安装的软件全部归零!!!
并且桌面的资料全部丢失!!!
重启后,大概率管理员账号还会被禁用,你得进安全模块把管理员账号解锁才能进系统。(win10进安全模式并不是按什么f8,而是要在windows图标转圈的时候强制关机两次,第三次就会进入系统维护模式,然后选择进入安全模式)
请慎用!!!
(2)安装vs2022
可以选择安装社区版本。
(3)安装windows sdk包
由于vs2022的 install并不带最新的sdk包,需要网上下载
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk
安装完成后如下图所示:
(4)安装wdk包
22h2这个版本下载下面的wdk包:
虽然写着是win11版本的 22h2,但是win10也可以用这个。
安装成功后会自动安装vs2022的驱开发项目模板。
如下图所示:
如果没有自动安装 WDK.vsix,可以手动安装。
成功后,在vs2022中就会有Driver的模板:
(5)总结安装过程
第一步:装windows SDK
第二步:装WDK
第三步:找到装WDK目录下的Vsix目录,找到WDK.vsix安装即可
友情提示,如果装WDK他自动装vsix的话,忽略第三步,即可。
重要点:
需要检查安装的wdk和windows sdk的版本是否匹配。
可以通过“程序和功能”来查看。
见下图所示:
(6)准备驱动版的hello world程序
新建一个“Empty WDM Driver”的项目。
新建一个cpp文件,改名为test.c
写上下面的代码:
#include <ntddk.h> VOID DriverUnload(PDRIVER_OBJECT pDriverObject) { DbgPrint("Goodbye!\n"); } NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath ) { DbgPrint("Hello, world lxy\n"); pDriverObject->DriverUnload = DriverUnload; return STATUS_SUCCESS; }
想要编译成功,要做下面重要事项。
说明如下:
(1) 下面这个.inf文件要删除。
它是wdm驱动专有的,我们的hello world只是想弄个古老的nt驱动,所以不能要这个,会编译出错的。
(2) 你用everything工具搜索一下头文件 ntddk.h
把这个路径添加到“外部包含目录”中去。
否则的话,代码全部是“未定义的标识符”,编译隔屁。
(3) 项目属性页中“常规”,其中sdk版本要选择你当前的。
这步如果搞错了,“Driver Settings”, "Driver Install", "Inf2Cat" 这些配置项就不存在了。
当然,你也不可能编译通过,会报ntddk.h等头文件里面有错误。
(4) 下面这个改否
否则一些警告也会编译通不过。
(5)下面这里,请设置得一样。
编译成功后,划线那个MyDriver1.sys就是我们的驱动。
(7)开一个虚拟机的win10 x64 版本的系统
使用管理员模式的power shell中敲入指令启动驱动测试模式。
bcdedit /set testsigning ON
然后重启系统,就看到下面这样的显示。
(8)测试驱动:
使用到两个工具:debugView和 Kernel Mode Driver Manager。
1. debugview
2. Kernel Mode Driver Manager
测试结果如下:
如果你Run的时候没有成功,原因可能是你没执行第7步,就是没打开虚拟机系统的“测试模式”。
或者你这两个工具没有使用管理员权限运行。
其它参考资料:
Windows驱动开发之环境搭建,长期Waiting for connecting...思路
https://blog.csdn.net/youzai2017/article/details/135942662

