驱动开发环境以及双机调试环境搭建

工作将近三个月了,做了几个项目,想在这里总结一下,方便以后自己或者大家借鉴。最近一个项目里需要做一个文件过滤驱动,我打算把整个过程中遇到的坑和解决方法,总结一下。这篇博客主要帮助大家实现驱动程序的开发环境搭建以及双机调试的环境搭建。

因为我需要面对的操作系统比较广,所以需要两个开发环境才可以基本覆盖(如果你不需要面对很多操作系统,可以把主机作为开发机以及调试机,虚拟机作为测试机)
这里使用vs2015+WDK10+win10 和vs2008+wdk7+ddk+win7
这两个都是开发环境,vs2015+WDK10+win10 配置很简单,安装完成就可以使用,如果找不到头文件就在VC++目录里添加一下
这里详细说vs2008+wdk7+dd7+win7

这里说明一下相关名词(我这里本机是win10,虚拟机装了win7)
开发机:win10(本机)涉及到比较老的操作系统会用win7开发,但是还是将驱动安装在 虚拟机,在调试机调试
调试机:win10(本机)
虚拟机:vm
测试机:虚拟机中的操作系统(这里安装win7)

因为驱动是在内核运行的,所以我们调试驱动需要用调试机去hook测试机的OS,然后运行测试机的驱动进行调试
我们要做的是在开发机开发驱动,生成.sys .pbd .cer(证书)然后编写.inf安装文本(VS2013以后会自动生成,修改个别部分就好了),把这些东西拿到测试机去安装,在调试机(一般是开发机)调试测试机

  • 环境搭建分为以下几个步骤
    一.虚拟机OS安装
    二.在开发机开发环境vs2008+wdk7+ddk
    三.在测试机配置调试环境(添加启动项,串口,改为dbg模式)
    四.在测试安装驱动demo(使用sc query 驱动名 来查看驱动是否成功安装并运行)
    五.给测试机添加串口
    六.在调试机机使用windbg工具hook测试机的操作系统

一.虚拟机OS的安装
(如果ISO不是官方的,虚拟机检测不到,无法使用以下步骤,可以根据这个教程安装http://jingyan.baidu.com/article/cd4c29791fcf1b756e6e6034.html
1.安装VMware Workstation
下载安装程序安装,如果主机操作系统开启了光驱自动运行功能,安装向导弹出提示框提示光驱的自动运行功能将影响虚拟机的使用询问是否要关闭此项功能,选择“是”关闭掉主机的此项功能。
安装完成后使用*****
5A02H-AU243-TZJ49-GTC7K-3C61N
VF5XA-FNDDJ-085GZ-4NXZ9-N20E6
UC5MR-8NE16-H81WY-R7QGV-QG2D8
ZG1WH-ATY96-H80QP-X7PEX-Y30V4
AA3E0-0VDE1-0893Z-KGZ59-QGAVF
2.在虚拟机搭建OS(使用自定义方便设置虚拟机相关配置,没有特别要求可以选择典型,根据默认创建)
驱动开发环境以及双机调试环境搭建
处理器和内存根据需要设置
驱动开发环境以及双机调试环境搭建
这里附上*****,如果安装完成后发现未能成功**,去驱动开发目录里找到**工具microKMS_v17.09.15**
win10秘钥专业版:W269N-WFGWX-YVC9B-4J6C9-T83GX
win7通用***:MVBCQ-B3VPW-CT369-VM9TB-YFGBP
   GPRG6-H3WBB-WJK6G-XX2C7-QGWQ9
   MM7DF-G8XWM-J2VRG-4M3C4-GR27X

网络类型选NAT比较容易设置,和主机使用同一个IP地址拨号
驱动开发环境以及双机调试环境搭建

二.在开发机开发环境vs2008+wdk7+ddk
1.首先在开发机安装VS2008,并配置环境变量
2.然后下载WDK7600和DDK的资源
3.安装WDK7600,在选择组件的时候全部勾选,有可能会弹出一个信息框(do you want to continue),点OK
4.打开DDK的资源文件夹,安装ddkwizard_setup,全部默认,将另外的cmd文件和bat文件复制到WDK的安装目录下,如图
驱动开发环境以及双机调试环境搭建
5.接下来设置WDK的环境变量,将WDK的安装目录C:\WinDDK添加到Path变量中,然后新建一个系统变量 变量名:WLHBASE变量值:C:\WinDDK\7600.16385.1
或者变量名:W7BASE变量值:C:\WinDDK\7600.16385.1
需要注意如果设置第一个新建项目的时候选择Windows Vista/2008 Server WDK
如果设置第二个变量名新建项目的时候选择Windows 7/2008 Server R2 WDK
驱动开发环境以及双机调试环境搭建
因为在编译的时候,是根据不同的变量名寻找资源的,如图
驱动开发环境以及双机调试环境搭建
6.进入VS2008配置
点击菜单栏的工具,选项
添加可执行文件路径
驱动开发环境以及双机调试环境搭建
添加库文件路径
驱动开发环境以及双机调试环境搭建
添加包含文件路径
驱动开发环境以及双机调试环境搭建
6.验证是否成功配置
驱动开发环境以及双机调试环境搭建
根据你设置的环境变量选择要用的WDK
驱动开发环境以及双机调试环境搭建
创建好了项目直接编译,如果出现编译成功,那就说明配置完成了。

三.在测试机配置调试环境(添加启动项,串口,改为dbg模式)
设置 Windows 符号服务器本地缓存路径
设置环境变量:_NT_SYMBOL_PATH
srv*D:\symbolFilePath*http://msdl.microsoft.com/download/symbols;cache*D:\symbolFilePath
打开cmd(需要注意登陆的用户必须是管理员)
C:\Users\Administrator>bcdedit
显示如下信息

Windows 启动管理器

标识符 {bootmgr}
device partition=C:
description Windows Boot Manager
locale zh-CN
inherit {globalsettings}
default {current}
resumeobject {3efd3a30-a452-11de-ba3a-870b5a0c554f}
displayorder {current}
{3efd3a36-a452-11de-ba3a-870b5a0c554f}
toolsdisplayorder {memdiag}
timeout 30

Windows 启动加载器

标识符 {current}
device partition=C:
path \Windows\system32\winload.exe
description Windows 7
locale zh-CN
inherit {bootloadersettings}
recoverysequence {3efd3a37-a452-11de-ba3a-870b5a0c554f}
recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
resumeobject {3efd3a30-a452-11de-ba3a-870b5a0c554f}
nx OptIn

实模式启动扇区

标识符 {3efd3a36-a452-11de-ba3a-870b5a0c554f}
device partition=C:
path \ghldr.mbr
description DOS

把timeout 30改为0,修改方法如下:
通过命令BCDEDIT /set {bootmgr} timeout 1 来配置停留时间,前面的1就是时间值,单位为秒。
BCDEDIT /set {current} description 1
创建新的系统启动项(xp upper)
bcdedit /copy {current} /d “Windows 7 Kernel Debug”
bcdedit /debug {f44707ab-f03c-11e2-8930-aeaa10f372b7} on //这几行命令可以通过msconfig去开启
设置COM口波特率
打开msconfig,如果成功执行了之前的操作,会发现默认os的名称被改成了1,然后下面新建了一个OS,点击下面的OS然后将它设为默认启动项
驱动开发环境以及双机调试环境搭建
然后点击高级选项,进行如下设置,开启调试模式
驱动开发环境以及双机调试环境搭建

四.在测试安装驱动demo
(使用sc query 驱动名 来查看驱动是否成功安装并运行)(这一步仅仅是为了简单的测试我们刚才的第三步操作是否成功了)
如果是用VS2013以上开发的,自动生成INF文件,那么可以用INF文件来安装。如果编译器没有自动生成INF文件,就下载DriverMonitor
在虚拟机用DriverMonitor来加载一个驱动,首先把开发机生成的相关文件拿到测试机,使用DriverMonitor打开 .sys文件,如果出现下图输出,则说明配置成功。
驱动开发环境以及双机调试环境搭建

五.添加端口,使用主机hook虚拟机OS
如果你的虚拟机设备里存在打印机,将它删除,为了让新配置的Serial Port 为1(如果不删除Printer,后面配出来的会是SerialPort =2,这还需要在虚拟机中再命令设置)
驱动开发环境以及双机调试环境搭建
然后添加一个串行端口
驱动开发环境以及双机调试环境搭建
输出到命名管道

驱动开发环境以及双机调试环境搭建
驱动开发环境以及双机调试环境搭建

记得勾选轮询时主动放弃CPU
驱动开发环境以及双机调试环境搭建
六.在调试机使用windbg工具hook虚拟机操作系统
关于使用windbg工具来调试我们的驱动的步骤,我会在另外一篇博客总结,写在这里感觉太乱了。这篇博客主要帮助大家实现驱动程序的开发环境搭建以及双机调试的环境搭建。
这里我们写一个批处理脚本,需要修改的地方是windbg的位置,还有你的端口号名称,其实就是为了每次打开windbg不用重新设置参数
驱动开发环境以及双机调试环境搭建
然后运行批处理脚本,如果windbg出现如下显示,说明已经hook住了虚拟机os,这时虚拟机的OS是停止的
驱动开发环境以及双机调试环境搭建
注意:这里可能出现连接有问题,可能是因为虚拟机OS调试端口没设置好,如果新建端口之前删除了之前的所有串行端口
那么你新建的端口是第一个,所以调试端口这里选择COM1,以此类推
驱动开发环境以及双机调试环境搭建
到这里我们就实现了开发环境的搭建和双机调试环境的搭建,接下来可以开发一些简单的驱动了,关于使用windbg使用符号文件调试驱动的步骤我会在另一篇博客总结。