一、创建项目
新建一个以Kernel Mode Driver, Empty(KMDF)为模板的驱动项目,项目名称HelloDriver,在项目中新建一个hello.cpp文件作为驱动入口文件,写一点简单的代码做测试:

hello.cpp代码:
#include <ntddk.h> // 提供一个Unload 函数只是为了让这个程序能够动态卸载,方便调试 extern "C" void DriverUnload( PDRIVER_OBJECT driver) { // 但是实际上我们什么都不做,只打印一句话 DbgPrint( "hello: my driver is unloading...\r\n"); } // DriverEntry,入口函数。相当于main。 extern "C" NTSTATUS DriverEntry( PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) { // 这是内核模块入口,可以在这里写入我们想写的东西 DbgPrint( "hello: my world!"); // 设置一个卸载函数,便于这个函数退出 driver-> DriverUnload = DriverUnload; return STATUS_SUCCESS; } |
修改告警:调整属性 - C/C++ - 常规,警告等级 4,将警告视为错误 否;
![]() |
二、编译及测试
- 根据目标机器,选择x86/x64编译
- 拷贝:KMDFDriver1.sys、KMDFDriver1.cer、KMDFDriver1.inf到测试机器
- 测试机器打开驱动测试(驱动需要正规签名才能使用,而测试程序没有签名)
bcdedit /debug on bcdedit /bootdebug on // boot 驱动需要此设置 bcdedit /set testsigning on // 使用测试签名可用,和禁用签名功能类似 |
- 测试机器打开debugview,需要配置收集内核驱动信息
- 利用驱动加载工具,安装驱动
![]() |
- 安装服务后,启动和停止驱动,即可看到对应的调试信息。至此完成第一个驱动demo
![]() |
三、远程调试
3.1 VS2019 远程调试
注:容易卡死,不稳定
1、VS2019中,选择 调试 - 附加到进程,连接类型选择 Windows Kernel Mode Debugger,连接目标为之前新建的Device,附加。
注意:附加前要开启虚拟机
![]() |
2、Debug窗口会显示以下字样,表示已打开管道并等待重连。(注意是 Opened \.\pipe\com_1)
![]() |
3、接着重新启动虚拟机,等待虚拟机进入桌面。Debug窗口显示如下:
注意:1.这里可能会花较长时间,并不是因为卡死了。
注意:2.重启虚拟机的时候记得禁用驱动程序强制签名。(或者使用testsigning)
![]() |
4、进入桌面后,虚拟机可以正常操作。在VS2019中按下 全部中断
5、等待VS停下来,并出现以下画面,再点击 继续。(先暂停再继续,否则可能断不下来)。
注意:如果VS很长时间都没有响应,可以用任务管理器结束VS,然后重新打开再附加到进程。
![]() |
6、此时就可以设置断点了
![]() |
7、后面,同单机一样,用驱动加载工具安装驱动即可。
3.2 windbg远程调试
工具:windbg或win10商店的windbg preview(推荐)
1、Attach to kernel、配置com信息

2、重启虚拟机

3、配置符号文件路径

4、open source

5、下断点
- break
- 强制加载符号文件:.load /i KMDFDriver1.sys
- 下断点:bp KMDFDriver1!DriverUnload
- 继续运行:g
- 在虚拟机加载驱动,触发相关过程,即可被断

注:
- cpp源文件乱码:源码保存为utf8-bom模式
- 断点位置不正确:确保pdb、cpp、sys文件编译版本一致
- 断点时机:需要已经加载驱动,再下断点
四、QA
Q1: 编译时出现error MSB8040: 此项目需要缓解了 Spectre 漏洞的库
原因:这是因为Visual Studio默认开启了缓解Spectre攻击的机制,所以就有两种解决方案,一种是生成解决方案时禁用Spectre缓解机制,另一种就是安装Spectre缓解机制。
a) 禁用Spectre机制: 右键解决方案,然后选择“属性”,然后选择“配置属性”——“C/C++”——“代码生成”,在最下方有一项Spectre缓解,下拉选择“禁用“就行了
b) 安装Spectre缓解机制:如下:
- 打开Visual Studio Installer,点击修改

- 选择单个组件,选择Spectre缓解库(最新),其中“最新”对应的为你的MSVC编译版本。点击修改完成安装

Q2:error 1297: Device driver does not install on any devices, use primitive driver if this is intended.

参考:
版权声明:本文为longkuis原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。