在上一篇博客中,我把所有要用到的工具都整理好了.现在就应该将它们安装好并使它们能够协同工作.让我们能够正式进入驱动开发.
各个工具的具体安装步骤这里就不写了,毕竟在上一篇博文中已经有了教程.
一、VMWare Work配置
1、安装好虚拟机后,给虚拟机增加一个串口设备。具体操作见图:
上面的\\.\pipe\com_1可以改\\.\pipe\com_2,我就不改了后面名字可以随便取的,完成配置后虚拟机设备配置就多了一个串行端口的设备。因为打印机用了端口1。所以设备里面显示的是串行端口2,重新启动虚拟机系统后,会发现设备管理里面多了一个COM2的串口设备(如果想设置成端口1,把打印机设备删了在添加串口设备,个人推荐直接删掉打印机)。
2、设置虚拟机成调试模式
有两种方式:
(1)
以管理员身份,在虚拟机命令行模式下运行如下2个命令开启。(Win + R键, 输入CMD)
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)。
我们使用下面的语句即可:
bcdedit /debug on
bcdedit /dbgsettings serial debugport:1 baudrate:115200
(2)
打开运行窗口,运行 “msconfig”,来到这个界面,选择高级选项:
选择调试,调试端口,波特率,其值不要更改:
保存并退出(需要重启才能生效),然后去更改虚拟机的计算机名为一个好看的名字,一会儿要用。具体方法这里不再阐述。
3、把WDK10的虚拟机调试驱动拷贝到虚拟机中安装。
到"C:\Program Files (x86)\Windows Kits\10\Remote\x64"和"C:\Program Files (x86)\Windows Kits\10\Remote\x86"中分别拷贝"WDK Test Target Setup x64-x64_en-us.msi"和"WDK Test Target Setup x86-x86_en-us.msi"到虚拟机中并安装。如果是32位系统则不用(不能)安装第一个。如果找不到可以用一下资源管理器的搜索功能。因为VS2015可以调试x86 x64两种驱动,根据被调试系统选择不同的文件拷贝到虚拟机安装,我的是64位的选择x64
4、虚拟机其他配置
(1)、DbgView软件。微软下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/debugview
(2)、WIN7、8、10下注册表修改,将以下代码写到.txt文件,将后缀改成.reg,注册此项.重启计算机:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]
"DEFAULT"=dword:0000000f
(3)、DbgView软件必须使用管理员权限打开
(4)、在Capture选项里,把那几个选项都扣上,使用DriverMonitor加载驱动程序(网上找或自己写加载驱动服务的程序),即可看见DbgPrintf字符串信息输出了.
(5)、 禁用强制驱动程序签名(WIN7开机F8选择禁用强制驱动程序签名),要进入测试模式
(6)、关闭兼容性助手:cmd的services.msc命令打开服务,“Program Compatibility Assistant Service”服务选择为禁用.
(7)、以管理员权限打开DriverMonitor.
上面步骤都要配一个也不能少,否则服务注册不了。
二、远程设备配置
(1)、选择“配置设备”
(2)、选择“添加新设备”
然后会有这么一个窗口出现,下面这张图那个唯一的文本框随便填,可以就用默认的名字
然后你发现不能按下一步。。。这可能是一个bug,其实这一个窗口是可以调整大小的。把这个窗口拉大一点,然后照下图设置:
那个计算机名就是虚拟机中显示的计算机名字
将打了箭头的改成图中的样子,其它地方就是默认值:
其中的“Pipe name”是配置虚拟机串口的那个管道名。
注意,如果之前没有删除虚拟机的打印机,然后接下来打死连不上虚拟机的,试试把“Target Port”改成com2,因为打印机可能占用了串口1。
如果此时虚拟机已打开,但状态还是下图这样的“不可用”的话,请再检查一下设置是否到位:
检查:虚拟机是否打开了调试模式(这个一般都开了),虚拟机是否已安装驱动,虚拟机的串口是否已经打开,“Target Port”是否正确等。
一直不可用也不要着急,说不定可以用。。。现在先按完成保存配置,准备调试,看看到底能不能用。
三、VS2015配置
在物理机上安装Win10的SDK和WDK,安装完成后,VS新建工程时出现下面的画面说明安装成功。
1、新建一个 Kernel ModeDriver,Empty工程
2、创建两文件(HelloWorldDriver.h,HelloWorldDriver.c)将下面的代码复制到你的工程中.
HelloWorldDriver.h文件
#ifndef __HELLO_WORLD_DRIVER_H__
#define __HELLO_WORLD_DRIVER_H__
#include <ntddk.h>
NTSTATUS DriverEntry(__in PDRIVER_OBJECT driver, __in PUNICODE_STRING reg_path);
VOID DriverUnload(__in PDRIVER_OBJECT driver);
#endif // __HELLO_WORLD_DRIVER_H__
HelloWorldDriver.c文件
#include "HelloWorldDriver.h"
NTSTATUS DriverEntry(__in PDRIVER_OBJECT driver, __in PUNICODE_STRING reg_path)
{
UNREFERENCED_PARAMETER(reg_path);
driver->DriverUnload = DriverUnload;
DbgPrint("Hello World, Windows Driver!\n");
return STATUS_SUCCESS;
}
VOID DriverUnload(__in PDRIVER_OBJECT driver)
{
UNREFERENCED_PARAMETER(driver);
}
3.工程配置
(1)、属性页 ---> C/C++ ---> 等级警告设置为3.
(2)、Driver Settings(驱动设置) ---> Target Platform(目标平台)设置为Desktop(桌面).
(3)、Driver Settings(驱动设置) ---> Target OS Version设置为Win7(因为我的测试机是Win7,如果你是Win10,那么你选Win10)
(4)、Inf2Cat--->Run Inf2Cat设置为否
(参考:http://blog.csdn.net/doublestarts/article/details/37922819)
(5)、Driver Signing(驱动数字签名) ---> Sign Mode设置为Off
(6)、编译驱动程序为X64 (现在很少X86的系统了吧,X64系统不能使用X86的驱动程序)
4、编译工程,将编译好的HelloWorldDriver.sys拷贝到虚拟机中.
(1)在虚拟机中以管理员权限启动DriverMonitor,然后选择HelloWorldDriver.sys文件
(2)选择完驱动后,点击启动驱动
(3)这个时候观察DebugView,显示了Hello World, Windows Driver!说明这驱动成功被加载并执行了.
四、驱动调试
(1)在vs中启动附加到进程
(2)选择刚刚添加的设备
(3)附加后右下角的视窗会出现红色框中的提示文字
这个时候点击
然后稍等一会,右下角会出现下面的文字,这个时候说明已经联机调试成功了,虚拟机已经被中断,无法进行任何操作了.
不过这时候vs会提示
暂时不管它,点击
虚拟机恢复了行动,可以接受操作.vs的提示也会自动关闭.
(3)在代码中打上断点
并再次在虚拟机中用DriverMonitor启动驱动
我们就会发现断点已经被触发.
注意事项:
1.要用debug输出的驱动文件拷贝到虚拟机。不然看不到调试输出信息。
2.编译出来的文件要和目标测试系统版本要一致,我测试都是64位。
3.源码改动之后,要把编译文件重新拷贝到虚拟机中,才能附加进行断点,否则进不了断点。
以上就是驱动调试环境的安装全部过程.