
一.简述
因最近需要编写一些xp与win7上的驱动程序,但是网上搜索环境配置要不就很老旧,要不很繁琐,最好还是能双虚拟机调试,在网上没有找到能完全满足需求的,就整合网上的一些资源编写此文档。
主要内容为使用vmware 双win7虚拟机调试、win7安装vs2015、使用驱动模板编译win7与xp驱动
二.环境介绍
应用名称 | 版本 | 备注 |
---|---|---|
windows7 x64 调试机 | windows7 x64 sp1 | cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso |
windows7 x64 被调试机 | windows7 x64 sp1 | cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso |
WDK 7600 | 7600.16385.1 | https://www.microsoft.com/en-us/download/details.aspx?id=11800 |
VS 2015 | Visual Studio 2015Community | |
ie 11 | ie 11 | https://support.microsoft.com/zh-cn/windows/%E4%B8%8B%E8%BD%BD-internet-explorer-11-%E8%84%B1%E6%9C%BA%E5%AE%89%E8%A3%85%E7%A8%8B%E5%BA%8F-99d492a1-3a62-077b-c476-cf028aff9a7f |
wingdb | 6.12 | 调试工具 |
vmware workstation | vmware workstation 17 pro | |
SRVINSTW.EXE | SRVINSTW.EXE | 安装驱动程序 |
dbgview64.exe | dbgview64.exe | 查看驱动打印 |
vs2013驱动开发模板 | 驱动配置模板 | https://bbs.kanxue.com/thread-188471.htm |
Everything | Everything-1.4.1.935.x86-Setup | |
64Signer | 64Signer | 签名工具 |
win7 虚拟机不能安装vm tools
https://catalog.update.microsoft.com/Search.aspx?q=kb4474419
vs2015支持模板导出,也可以选择制作自己的模板
三.安装测试wdk7600
3.1.安装wdk7600
下载
WDK 7600
并解压执行
勾选全部选项并点击ok
选择路径,我这直接点击ok
点击
Finish
完成安装
3.2.使用wdk7600编译驱动程序
3.2.1.驱动代码
创建
first
目录,在此目录中创建三个文件first.c
#include <ntddk.h>
VOID DriverUnload(PDRIVER_OBJECT driver){
DbgPrint("first:Our driver is unloading\r\n");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT driver,PUNICODE_STRING reg_path){
DbgPrint("first:Our hello my salary\r\n");
driver->DriverUnload=DriverUnload;
return STATUS_SUCCESS;
}
makefile
!IF 0
Module Name:
makefile .
Notes:
DO NOT EDIT THIS FILE!!!
!ENDIF
!INCLUDE $(NTMAKEENV)\makefile.def
SOURCES
TARGETNAME=first
TARGETTYPE=DRIVER
SOURCES=first.c
TARGETNAME表示名字,编译出来之后模块的名字first.sys
SOURCES表示要编译的.c文件
不要加入.h文件,.h是被包含在.c文件中编译的
3.2.2.编译
开始菜单中,选择 所有程序 ,然后选择
Windows Driver Kits
->WDK版本
->Build Environments
->Windows 7
->x64 Checked Build Environment
进入 first 目录执行 build 命令
编译结束, first.sys 出现在
C:\Users\test\Desktop\first\objchk_win7_amd64\amd64
目录下
3.3.测试驱动程序
3.3.1.安装驱动程序
在一台新安装的
win7 x64 sp1
虚拟机上执行,在开机时按下f8
,禁用驱动签名,将生成的first.sys
拷贝到此虚拟机
使用管理员权限打开
SRVINSTW.EXE
,安装服务
点击下一步
本地机器
点击下一步
服务名称填写
first
然后点击下一步
根据
first.sys
所在路径填写,文件位置
选择
设备驱动
,点击下一步
默认点击下一步
选择
手动
,点击下一步
点击
完成
,弹出服务成功安装
3.3.2.执行驱动程序
管理器权限执行
dbgview64.exe
,在菜单栏点击capture
,然后全部勾选
管理员启动
cmd
,执行net start first
,可以看到dbgview64.exe
,有打印输出与,上述驱动代码相同
net start first \\启动驱动
net stop first \\停止驱动
sc delete first \\卸载驱动
如上面所示
wdk7600
安装成功
四.安装vs2015
4.1.安装IE11
因为vs2015要求安装
ie 10
以上版本,这里安装ie11
可能有下列情况,先尝试直接安装,直接安装不成功或者看报错信息在选择执行情况1或情况2
情况1:有可能安装
IE11
需要补丁,补丁链接如下
32位
http://www.microsoft.com/zh-cn/download/internet-explorer.aspx
64位
http://www.microsoft.com/zh-cn/download/details.aspx?id=45154
情况2安装证书:
在win10系统上Windows键+R 弹出
运行
对话框,输入certmgr.msc
,打开Windows的证书管理器导出如下证书安装在win7系统上
1.Microsoft Root Certificate Authority 2010;
2.Microsoft Root Certificate Authority 2011;
3.COMODO RSA Certification Authority;
将上面三个证书拷贝到
win7
系统然后安装上去
4.2.安装vs2015
运行
vs2015
安装程序,这里我选择自定义
只选择
c++
然后点击下一步
点击安装
等待安装成功即可
五.配置vs2015编译驱动
这里是使用模板的方式进行的配置编译驱动,这里直接使用网上大佬放出来的模板,也可以自己进行配置然后导出是一样的,但是会很耗费时间与精力
5.1.配置环境变量
新建
WDKPATH
,并添加wdk路径
5.2.设置模板
安装
Everything
,搜索ProjectTemplates
目录
进入
ProjectTemplates
,将下载好的模板拷贝过去,然后重启系统
5.3.编译驱动程序
打开
vs2015
创建新项目,点击c++
,可以发现出现了Windows Driver1
创建
Windows Driver1
项目,名称填写first2
,将一开始编写的驱动代码拷贝过去
如下图所示使用此项目可以编译多种系统的驱动,
Checked
为调试,free
为re版
并且可以选择
x64
和x86
,需要注意无法编译xp
下的x64
的驱动程序需要注意这是使用
vs2013
的模板,需要将项目属性改为v140
生成
->重新生成解决方案
5.4.更改模板
1.更改上面的
平台工具集
2.在属性面板,可以看到
全程序优化
(无全程序优化)
3.更改到
re
版,可以看到使用链接时间代码生成
在属性页,点击
链接器
->优化
->使用快速链接时间代码生成 (/LTCG:incremental)
,这样编译会报错
需要改成
使用链接时间代码生成 (/LTCG)
,即可完成编译
自己也可以制作成模板,就不需要每次编写驱动,进行配置vs
六.双虚拟机调试驱动
本文中的调试机与被调试机都为
win7 x64 sp1
6.1.配置调试机
该端是服务器 ,另一端是虚拟机
打开windbg左上角的 File然后点击Kernel Debug 然后再点击 COM ,设置如下图所示 ,然后点击确定
安装的wdk7600中就带有
windbg
选择com,然后点击确认,设置如下图所示
点击确定后的画面如下图所示,然后重启Win 7 在 Win 7 虚拟机那边选择启用调试程序
6.2.配置被调试机
虚拟机的串行端口设置如下(该端是客户端 ,另一端是虚拟机 ),命名管道设置为 \.\pipe\com_1
以管理员身份运行cmd执行
bcdedit
,一般只有一个标识为{current}的启动加载器是当前的启动配置
使用如下命令建立一个新的启动项,并且使用bcdedit检查是否copy成功
bcdedit /copy {current} /d "Windwos7"
设置新的启动项
bcdedit /debug ON
bcdedit /bootdebug ON
查看当前的调试配置
bcdedit /dbgsettings
,一般会显示出使用的第一个串口波特率为115200bps
选择菜单的超时,我设置为15秒: bcdedit /timeout 15
重新启动,当需要调试时就用调试模式进入
6.3.驱动调试准备
6.3.1.断点
32位支持内联asm汇编
64位利用在Source文件中直接添加asm文件,直接在asm文件中写汇编代码,然后将asm文件编译为OBJ文件。然后就可以在c++文件中声明asm文件中的函数后直接使用asm文件中用汇编写的函数
64位也可使用 DbgBreakPoint();
#include <ntddk.h>
VOID DriverUnload(PDRIVER_OBJECT driver) {
DbgPrint("first:Our driver is unloading\r\n");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) {
DbgBreakPoint();
DbgPrint("first:Our hello my salary\r\n");
driver->DriverUnload = DriverUnload;
return STATUS_SUCCESS;
}
本文使用此方法
6.3.2.签名
win7 x64安装驱动需要签名,这里使用
64Signer
6.3.3.调试符号下载与配置
使用windbg自动下载符号很慢,所以使用windbg目录中存在 symchk.exe 程序,使用如下命令可进行下载
symchk.exe /r c:\windows\system32\ /s SRV*C:\Users\test\Desktop\symblos\*http://msdl.microsoft.com/download/symbols
- /r c:\windows\system32\ 下载system32下的符号
- SRV*C:\Users\test\Desktop\symblos\ 下载符号的保存路径
- http://msdl.microsoft.com/download/symbols 微软的符号服务器
加载被调试驱动的符号
Windbg->file->symbol file path,根据自己的路径填写,本文填写示例如下:
C:\Users\test\Desktop\code\test\first6\x64\Checked_win7;srv*C:\Users\test\Desktop\symblos*http://msdl.microsoft.com/download/symbols
第一个路径为编译驱动的驱动的符号路径,使用
;
分割
6.4.驱动调试
调试机-打开windbg左上角的 File然后点击Kernel Debug 然后再点击 COM ,设置如下图所示 ,然后点击确定
被调试机启动选择
启用调试程序
被调试机启动驱动
通过百度网盘分享的文件:windows_xp_win7驱动编译调试环境搭建.zip
链接:https://pan.baidu.com/s/1em90D0FNXebX007hk6pwuQ?pwd=9s2u
提取码:9s2u
七.参考链接
https://www.cnblogs.com/revercc/p/14609685.html
https://bbs.kanxue.com/thread-188471.htm
https://blog.csdn.net/fonx/article/details/79720490?spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-13-79720490-blog-104530361.235%5Ev43%5Epc_blog_bottom_relevance_base8&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-13-79720490-blog-104530361.235%5Ev43%5Epc_blog_bottom_relevance_base8&utm_relevant_index=20
https://blog.csdn.net/jmh1996/article/details/88382133
https://cloud.tencent.com/developer/article/1621329?sid_for_share=99125_3
https://bbs.kanxue.com/thread-261326.htm
https://bbs.kanxue.com/thread-251052.htm
https://blog.csdn.net/qq_42931917/article/details/108265848
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)