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

因为我需要面对的操作系统比较广,所以需要两个开发环境才可以基本覆盖(如果你不需要面对很多操作系统,可以把主机作为开发机以及调试机,虚拟机作为测试机)
这里使用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使用符号文件调试驱动的步骤我会在另一篇博客总结。

驱动开发环境以及双机调试环境搭建相关推荐

  1. 【驱动开发】WinDbg 双机调试 Windows XP

    起序:最近学习驱动开发,环境搭建,记录一下. 一.软件环境 宿主机:Windows 10 虚拟机:VMware Workstation 16.1.1 Pro 系统:windows_xp_profess ...

  2. 双机调试环境搭建 windbg + virtualkd

    双机调试环境搭建 1. 环境准备 2. 单独的windbg双机配置 2.1 设置GuestOS环境 2.2 设置HostOS环境 2.3 Windbg测试 3. 使用Virtualkd/Virtual ...

  3. macos 环境下搭建 windbg 虚拟机双机调试环境

    「求职」阿哈哈哈广告来了,博主本人,23届落魄web安全,在线求职,本科学历有一段大厂实习,有缺人的大佬么或者有内推的大佬给个机会吧,求求啦,可以微信联系我给您简历:ocean888-_- 文章底下有 ...

  4. Windbg双机调试环境配置(Windows7/Windows XP+VirtualBox/VMware+WDK7600)

    简介:Windbg双机调试内核.驱动 下载软件: 下载Windbg(GRMWDK_EN_7600_1.ISO) 下载VirtualBox 5.2/VMware 12 一.安装WDK,这里要提一点的是D ...

  5. Windows驱动开发(1)HelloWorld环境搭建

    开发环境 Windows Version: 2004 (19041.264) WDK Version: 10.0.19041.1 SDK Version: 10.0.19041.1 Visual St ...

  6. imx6u开发板导入实际应用(一)熟悉开发板,建立调试环境

    硬件基于正点原子Alpha-linux开发板,功能齐备,外设丰富,资料详尽,入门或者系统训练还是挺合适的.价格稍贵,不过用来作为第一套应用入手还是不错,后续实际项目可以参考裁剪,比如偏现场控制,比如偏 ...

  7. 驱动开发的几种编译环境配置法----PS:我孤陋寡闻了。。。。反省啊。。。。

    驱动开发与Win32下的程序开发不同,没有一套智能的IDE环境,点点鼠标框架代码IDE就帮你生成好了.Windows下的开发为什么那么容易上手,Visual studio功不可莫.一帮懒人在MS的&q ...

  8. windbg+VM 设置内核调试环境(双机调试)

    虚拟机是XP情况: 启动项添加调试启动,并设置波特率为115200 具体操作可在boot.ini中添加如下代码: multi(0)disk(0)rdisk(0)partition(1)\WINDOWS ...

  9. Windebug双机调试环境搭建2020-10-12

    主要参考 这两篇文章 https://www.cnblogs.com/fanling999/p/3920202.html https://www.cnblogs.com/witty/archive/2 ...

最新文章

  1. OpenCV(十九)直方图(直方图计算、掩膜、均衡化、自适应均衡化)
  2. Sorting It All Out--POJ 1094
  3. weex前端式写法解决方案---eros
  4. 为表增加字段与拷贝数据到另一个表
  5. mongodb save和insert区别
  6. 华为云车联网解决方案
  7. 00-自测3. 数组元素循环右移问题
  8. 【数据结构_浙江大学MOOC】第六七八讲 图
  9. OSChina 周六乱弹 —— 那些神一样的电视剧
  10. 建筑师学python有用吗_建筑师为什么要学编程?
  11. 11.25 AtCoder Beginner Contest 129
  12. CTFshow misc入门 持续更新中
  13. 【山大智云】SeafileServer源码分析之CDC(基于内容长度可变分块)
  14. 三菱fx5u plc项目模板程序(含触摸屏程序) 程序注释全面,用的三菱fx5u系列plc和威纶触摸屏
  15. 大写日期(大写日期10月前要写0吗)
  16. 如何将网站发布和部署到本地服务器详细教程
  17. apicloud影视解析APP源码 HTML
  18. 【软件工程实践】Hive研究-Blog6
  19. vue调用百度地图文档与说明
  20. processing

热门文章

  1. 【OpenCV】Pyqt界面+摄像头实现人脸检测+安全帽识别,最终导出为exe文件
  2. 我的世界服务器末地文件在哪,我的世界手机版要塞怎么找 末地要塞在哪1.0.3
  3. [JavaWeb]_[初级]_[如何更换免费网站字体]
  4. for循环取出Map的值
  5. python 虚拟环境删除_python 虚拟环境命令
  6. Java垃圾自动回收机制
  7. 预览图片pdf等文件
  8. 仿鲜果网切换activity
  9. NX/UG二次开发—CAM—获取程式的刀具、加工坐标系、加工方法
  10. CAD工具——导出PDF