驱动的开发对于初学者来说是不友好的,我们不知道怎么入手,从哪里入门。对于初学者来说束手无策,特别是碰到一个很简单的问题,都不知道怎么解决,这一系列的教程,就是用来排除这些障碍。
大部分的驱动开发教程都会先给我们把文档和demo给我们贴出来:
Windows驱动程序入门: Windows 驱动程序入门 - Windows drivers | Microsoft Docs
Github: https://github.com/Microsoft/Windows-driver-samples
但这对于初学者来说,一开始并没有什么用,因为看不懂。我们还是按照之前有一定的编程基础,来进入驱动的开发。假设大家已经安装了vs2019或者更高版本的vistual studio
。先开发一个Hello World
的驱动程序,把驱动程序安装到测试机上,看发生了什么。我们先不管里面的逻辑原理是什么,先依葫芦画瓢,整出第一个Hello World
的demo。
安装WDK
也是比较简单的事情,在Vistual studio Install
上找到Windows Driver Kit
,进行安装,安装完成了以后会出现Windows Driver Kit
已经打钩了。
新建一个工程,选择Empty WDM Driver
项目,新建driver.cpp
文件,编写如下代码:
// driver.cpp
#include
extern "C" void DriverUnload(PDRIVER_OBJECT pDriverObject);
extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath)
{
DbgPrint("[GO2CODING_Driver] DriverEntry\n");
NTSTATUS status = STATUS_SUCCESS;
pDriverObject->DriverUnload = DriverUnload;
return status;
}
extern "C" void DriverUnload(PDRIVER_OBJECT pDriverObject)
{
DbgPrint("[GO2CODING_Driver] DriverUnload\n");
return;
}
这时候编译会出错,
error C2220: 以下警告被视为错误
warning C4100: “pRegPath”: 未引用的形参
warning C4100: “pDriverObject”: 未引用的形参
我们还需要如下的设置:
1.配置属性 - C/C++ -常规 中 将警告视为错误 设置为 否
2.配置属性 - Driver Signing - General 中 Sign Mode 设置为 Off。
3 .配置属性 -Inf2cat - run Inf2cat 设置为 否。
这样编译成功后,生成HelloWDM.inf
和HelloWDM.sys
文件。第一个demo也就完成了。
在做驱动的时候,并不像以前开发的应用程序那样,最好不要直接在本机上测试,我们需要一台windows 10 的虚拟机,虚拟机的安装方式可以参考相关的教程。
我们还需要驱动开发的相关工具,包含DebugView
,DriverMonitor
,IRPTrace
,WinObj
,DeviceTree
,DiskView
,DriverManager
,EzDriverInstaller
,可以在这里进行下载。放到测试机上。
测试机在正常的模式下,是无法安装windows没有签名的驱动,我们需要把测试机变为不需要签名验证。
按shift
重启测试机。
进入这个界面,选择 疑难解答->启动设置->重启。重新进入系统,在如下的页面中按 7 启动windows。
重启完后,把编译好的HelloWDK
放到测试机上,进入设备管理(电脑右键->管理),添加过时硬件。
一路下一步到底,直到出现 从磁盘安装
,选择安装的路径到刚才拷贝的路径下。
在安装驱动之前,我们先以管理员的身份
打开debugview
,在Capture
选择如下,等待着log
的输出。
安装驱动,会 出现如下的提示,选择始终安装。
在设备管理上出现了,如下的新设备。
这个log
对于我们来说,意义太重大了,说明我们不仅仅把驱动安装成功了,还打印出了日志,简直相当于调试了,我们的心安了不少。