驱动开发过程中, 用双机调试算是最方便的调试方式.

环境配置:

一 虚拟机配置:

        

\\.pipe\com_1

我这里配置的是com1, 所以需要把虚拟机默认的打印机去掉, 因为打印机也会使用com1,也可以配置com2.

在虚拟机里面运行 msconfig

 在虚拟机中用管理权限运行cmd, 执行命令 bcdedit /set testsigning on, 使系统处于测试模式.

编译好的驱动是使用测试证书签名的, 不开启测试模式是无法安装驱动的.

修改虚拟机的计算机名称  [这一步不做也可以]

 

 

 

 这里我编辑为VM-TestDriver

最后一步, 安装WDK的调试包, 不是vs的remote debug

wdk的调试包默认安装在 C:\Program Files (x86)\Windows Kits\10\Remote\x64

安装完, 重启虚拟机

二 VS2019配置 :

配置过程中可以不需要管理员, 但是调试过程需要管理员全选, 尽量所有的步骤都运行在管理权限下

 

其中Network host name 是我上面配置的计算机名字

 

最终的结果

实际调试: 

点击附加后, 状态会变成这样

这时候点一下调试的暂停键

这时候虚拟机会卡死

在debugger 的控制台输入g命令

虚拟机恢复正常, 能操作了, vs进入如下状态 

前面几步, 都不依赖驱动, 主要使VS附加到虚拟机中, 使虚拟机进入调试状态.

下面步骤依赖具体的驱动, 在driverentry入处打断点

把之前编译好驱动文件拷贝到虚拟机中,   用DriverMonitor 或者 devcon 或者 用sc 命令等安装驱动.

注意微过滤驱动, 例如文件过滤驱动, minifilter, 右键inf安装后, 需要使用 fltmc load swapbuffers 命令来加载驱动.

这时候调试器就会处于中断状态

技巧:

        利用VMware的快照功能, 可以快速重测. 

        有时候重新启动vs, 再打开虚拟机并附加到VM虚拟机时一闪而过, 并没有进入下面这个界面

原因是vs有个bug, 在重新打开vs时候, 并没有读取管道信息, 这时候需要重新打开下面这个信息就行了.

总结: 

         vs2017 之后驱动开发变得简单了许多, 以前需要用windbg这老古董, 还需要使用非常多命令, 现在变得跟开发用户程序差不多, 大大提高了生产力, 当然, 要变得专业点还是需要去学习windbg的命令, 但是现在基本不太需要了.

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐