一.简述
-
因最近需要编写一些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
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)