VS2017 + Vmvare 调试驱动

基础:

  1. VS2017安装成功
  2. wdk10

注意事项:
关闭 、主机 客户机 防火墙 、 互相ping都能ping通。

一、具体操作步骤

工具安装就不说了,不会的百度一下。只说一下一些关键的地方。
1、安装好虚拟机后,给虚拟机增加一个串口设备。具体操作见图:
VS2017 + Vmvare 调试驱动_第1张图片
VS2017 + Vmvare 调试驱动_第2张图片
VS2017 + Vmvare 调试驱动_第3张图片
完成配置后虚拟机设备配置就多了一个串行端口的设备。因为打印机用了端口1。所以设备里面显示的是串行端口2(如果想设置成端口1,把打印机设备删了在添加串口设备)。

2、配置虚拟机系统为调试模式

 以管理员身份,在虚拟机命令行模式下运行如下2个命令开启。

 bcdedit /debug on
  bcdedit /dbgsettings serial debugport:n baudrate:115200

  where n is the number of a COM port on the virtual machine.(n时虚拟机的一个COM端口号。就是设备显示的串行端口2,n就是端口2)。

3、把WDK10的虚拟机调试驱动拷贝到虚拟机中安装。
VS2017 + Vmvare 调试驱动_第4张图片
VS2017 + Vmvare 调试驱动_第5张图片
因为VS2017可以调试x86 x64两种驱动所以两个都拷贝到虚拟机安装。也可以根据需要情况安装(32位里安装x86版)
4、VS2017开发工具配置
在VS2017的菜单栏点击DRIVER–TEST–CONFIGURE 如图
VS2017 + Vmvare 调试驱动_第6张图片
配置界面,下面两个选项第一项由VS2017帮我们创建一个WDKuser测试账户,自动打开测试模式等。第二个是使用我们自己配置的参数。由于上面我们已经配置了串口参数 、设置了调试模式所以我们选择第二个就行了。
VS2017 + Vmvare 调试驱动_第7张图片
DESKTOP-1R835HV是虚拟机里安装的操作系统的计算机名

如下配置在内核模式中,选择串口、配置好波特率、勾上2个选项、管道名称、端口号。
VS2017 + Vmvare 调试驱动_第8张图片
VS2017 + Vmvare 调试驱动_第9张图片
出现上述红色框字样则说明配置已经成功了。(不要开启全局代理软件,否则会出现连接不上的问题)。

5、使用工具安装调试64位驱动
VS2017 + Vmvare 调试驱动_第10张图片

使用DebugView打印内核调试信息是开发驱动的非常重要的手段,但DebugView默认在WINDOWS 7和WINDOWS 10下却无法获取内核的调试日志,驱动调用KdPint/DbgPrint等的打印结果是无法被DebugView给捕捉到的。设置方法如下(复制下面的代码到txt文件。改后缀为.reg后执行,然后重启电脑):

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]
“DEFAULT”=dword:0000000f
还有自己编译出来的驱动要使用编译的Debug版本来测试,Release版本是不会执行KdPrint/DbgPint函数的。
VS2017 + Vmvare 调试驱动_第11张图片

6、在VS2017中下断点进行调试
如果你第五部已经完成了,并且在DebugView中已经能够输出调试的打印信息了,辣么骚年你已经离成功只有一部之遥了

创建一个驱动工程,WDK10提供的模板中根本没有提供NT驱动模板,我们如何创建NT驱动呢?
解决:其实虽然没有提供NT模板,但是我们可以建立WDM空模板工程,然后再自己添加文件,编译,得到的也就是NT驱动了。

VS2017 + Vmvare 调试驱动_第12张图片
驱动工程中会帮你建立一个inf文件,NT是使用不到的,可以直接删除。我们直接添加一个first.c

在文件中添加测试代码。

#include  

VOID DriverUnload(PDRIVER_OBJECT objDriver)
{
	// 什么也不做,只打印一行字符串
    DbgPrint("My Dirver is Ending...\r\n");
}

NTSTATUS DriverEntry(PDRIVER_OBJECT objDriver, PUNICODE_STRING strRegPath)
{
	// 打印一行字符串,并注册驱动卸载函数,以便于驱动卸载
	DbgPrint("My Dirver Is Starting!\r\n");

	objDriver->DriverUnload = DriverUnload;

	return STATUS_SUCCESS;

}

编译,报错,没有关系,这些都是因为安全警告等级太高了,我们可以降低编译器警告等级的方式解决:
VS2017 + Vmvare 调试驱动_第13张图片
如果编译的时候还是出现错误 可以参照 我的另外一篇博文
https://blog.csdn.net/qq_21763381/article/details/83210572
VS2017 + Vmvare 调试驱动_第14张图片
辣么现在我们开始附加虚拟机的内核进行调试了。
首先把虚拟机的系统内核附加到VS2017,具体步骤见下图
VS2017 + Vmvare 调试驱动_第15张图片
选中内核调试模式、选自己配置的那个电脑、选中下面列表中内核。见下图
VS2017 + Vmvare 调试驱动_第16张图片
点击附加,然后出现下图界面,点击一下全部中断
VS2017 + Vmvare 调试驱动_第17张图片
VS2017 + Vmvare 调试驱动_第18张图片
然后我们在下面的Debugger Immediate Winddow窗口的 Kd> 一行输入命令 g 让系统运行起来。这样虚拟机中的系统又可以点击了。

最后一步了。使用我们刚刚建立的驱动工程编译出来的.sys驱动文件拷贝到虚拟机中。用第五步的工具进行安装、启动。启动的时候自动触发VS2017中的下的断点。至此可以像平时我们调试程序一样进行单步调试了。
注意事项:1、一定要拷贝Debug版本的进行调试。
2、拷贝到虚拟机中的.sys文件一定要是你源码编译出来的。如果改动了源码后一定要重新拷贝一份新的驱动文件到虚拟机中调试。否则无法触发断点的。
VS2017 + Vmvare 调试驱动_第19张图片
安装驱动程序
VS2017 + Vmvare 调试驱动_第20张图片
启动驱动程序
VS2017 + Vmvare 调试驱动_第21张图片
当驱动程序启动时,发现断点已经被激活了

你可能感兴趣的:(Windows驱动开发)