Windows编程—Windows驱动开发环境搭建
前言
作为一个编写Windows程序的开发人员,对Windows驱动开发 并非必需要掌握,但是掌握 Windows驱动开发对Windows程序开发人员却有极大的好处。一个直观的感受 程序操作权限更大了,因为处在内核层了嘛。应该可以写更厉害的外挂,普通Windows程序写个辅助完全是没问题的,但是涉及到数据修改突破游戏程序的一些限制 必须用更高权限的内核驱动了。
开始学习Windows驱动开发,第一步当然是环境搭建了。因为笔者也在驱动环境搭建上也吃过亏,所以这里进行记录和分享,当然这里也是集众家之长了。
其实笔者在一开始学Windows程序开发的时候 搭过一次驱动开发环境,当时直接用vs2015还是vs2017 忘了,使用WDK10,搭了好几周 都没搭成功,最后 无奈放弃。总结下失败原因,WDK10的版本众多 而且还要和当前 操作系统一一对应,而且win10 又经常更新,当时调试机也是用的win10版本,笔者电脑配置也不行 开win10虚拟机也吃力。
这里笔者建议初学者 不要一开始 就WDK10 和 VS集成开发 调试。先使用windbg 把双机调试搞起来了 再说。其实vs集成开发调试 也是调用的windbg。这里顺带说一下 WDK版本和操作系统版本关系。WDK 7600_1 在主机最低Win7安装,编译出来的驱动 最低支持到Win XP,VS未集成。WDK8.1 在主机最低Win8上安装,编译出来的驱动最低支持Win Visa,VS2013开始集成。WDK 10具体版本 就具体细化了 编译出来的驱动最低支持到Win7。基本上做Win开发 都是以 Win XP作为 支持的最后底线,所以一般 我们用WDK7即可了。
笔者这里环境是 主机Win10 + WDK7600_1 + 调试机Win XP Sp3 。
步骤
步骤一
在win10上安装 WDK7600_1,将GRMWDK_EN_7600_1.ISO 解压安装即可。百度云下载链接
链接:https://pan.baidu.com/s/1ldYMIIn6837iq2IYUpNSqg
提取码:3lex
或者 网上搜索,都可以找到。
步骤二
使用VMware安装Win XP Sp3虚拟机,安装完毕后,在C:\boot.ini中添加调试模式启动选项。添加后如下:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200
此时如果重启,显示页面应该如下,说明boot.ini配置好了。
随后添加串行端口。用于主机与调试机通信使用的。
步骤三
配置WinDbg
File -> Kernel Debugging -> COM 进行如下配置,端口和波特率要和 虚拟机配置一样。
也可以 将windbg.exe 发送到桌面快捷方式,在快捷方式 -> 属性-> 快捷方式 -> 目标 空格后添加如下参数,这样以后 双击 就开始会连接调试机。
// 目标程序后面 添加如下参数
-b -k com:port=\\.\pipe\com_1,baud=115200,pipe
// 下面是笔者的目标
D:\WinDDK\7600.16385.1\Debuggers\windbg.exe -b -k com:port=\\.\pipe\com_1,baud=115200,pipe
连接测试
在步骤二、三 完全配置好了就可以 测试 双机调试 是否连通通了,重启 Win Xp Sp3,可以在启动项 那里来回切,这样就停在那里了。此时 调试机 的串口已经启动了,此时可以进行步骤三 进行连接了。
此时可以点击 WinXp 调试启动了。
此时WinDbg如下:
此时,虚拟机也会被暂停,在kd> g 继续,测试虚拟机正常启动。
在虚拟机中可以加载驱动进行测试,看windbg是否有输出,调试机 连接 windbg 调试,请看步骤五。
步骤四
配置系统内核符号表。笔者用的Win XP Sp3 x86版本,下的符号表 WindowsXP-KB936929-SP3-x86-symbols-full-ENU.exe 这个,本来微软可以在线获取符号表,笔者自己测试 貌似没起效果 没有进行在线获取。百度云链接:
链接:https://pan.baidu.com/s/1ABA8qcealpBKr_Op2QF_Pw
提取码:wmi3
笔者这里选择的安装目录时在 C:\symbols。这里一定要注意,我们配置符号表路径 不能直接是根目录,一定得 具体到下面的子目录 才是 pdb路径。
在 系统环境路径配置如下:
_NT_SYMBOL_PATH
F:\Book\Windows\Windows内核安全与驱动开发随书源代码\first\objchk_wxp_x86\i386;C:\Symbols\acm;C:\Symbols\ax;C:\Symbols\cnv;C:\Symbols\com;C:\Symbols\cpl;C:\Symbols\dic;C:\Symbols\dll;C:\Symbols\drv;C:\Symbols\ds;C:\Symbols\exe;C:\Symbols\iec;C:\Symbols\ime;C:\Symbols\ocx;C:\Symbols\scr;C:\Symbols\sys;C:\Symbols\tpl;C:\Symbols\tsp;C:\Symbols\wpc;SRV*C:\Symbols_cache*http://msdl.microsoft.com/download/symbols;
笔者这里是 把测试的sys驱动的 pdb路径配置上,然后再才是本地Win XP Sp3系统符号表,最后再才是 在线获取符号表配置(笔者这里测试貌似不起效果)。
配置完了后,可以重写进行连接测试,走到 kd> 命令行处,或者如果在运行时直接 Debug -> Break 也会进行中断到 kd> 命令行处,我们进行一些简单测试。
// 1、查看设置的符号表路径,如果查找出来不是签名配置的路径,可以在WinDbg->File->Symbol File Path 将路径路径拷贝进入勾上Reload框 然后点击OK。 就会重新加载符号文件路径了。
kd> .sympath
// 2、查看相应的模块信息,如果能查找系统模块pdb说明 我们配置系统符号表没问题
kd> !lmi ntkrpamp
步骤五
我们准备一个 测试用的sys,看能否进入断点调试。我们只需要找一个可以加载装载驱动的软件就可以了。这里笔者用 Driver Monitor软件来加载驱动。
这里准备一个sys文件,这里笔者直接用<< Windows内核安全与驱动开发 >> 随书源代码中的 first例子。使用 x86 Free Build Environment(安装好wdk后,在启动菜单可以找到) 进行编译,cd 切换到first.sys目录,然后build。会生成如下的 first.pdb和first.sys。
first.c
///
/// @file first.c
/// @author crazy_chu
/// @date2008-11-1
///
#include <ntddk.h>
// 提供一个Unload函数只是为了
VOID DriverUnload(PDRIVER_OBJECT driver)
{
// 但是实际上我们什么都不做,只打印一句话:
DbgPrint("first: Our driver is unloading…\r\n");
}
// DriverEntry,入口函数。相当于main。
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
#if DBG
_asm int 3
#endif
// 这是我们的内核模块的入口,可以在这里写入我们想写的东西。
// 我在这里打印一句话。因为”Hello,world” 常常被高手耻笑,所以
// 我们打印一点别的。
DbgPrint("first: Hello, my salary!\r\n");
// 设置一个卸载函数便于这个函数能退出。
driver->DriverUnload = DriverUnload;
return STATUS_SUCCESS;
}
这个路径 要添加到 环境变量_NT_SYMBOL_PATH 或者 WDK中的 sympath中去。
我们把first.sys 拷贝到 虚拟机中,然后使用 monitor,File ->Open Driver first.sys ,然后再File->Start Driver 这时会去装载驱动,然后再File->Stop Driver 这时会去 卸载驱动。
总结
作为初学者,建议先把 windbg双机调试模式 搞起来这才是王道,vs集成驱动开发可以后面再搞。笔者认为 win10 + wdk7 + win xp sp3 双机调试也是最省配置的。
上一篇: Linux设备模型-总线,设备和驱动
下一篇: IMX257虚拟网卡vnet驱动程序
推荐阅读
-
windows下Python+Editplus windows Python开发环境
-
Windows7下PHP开发环境安装配置图文方法
-
Windows下搭建PHP开发环境(Apache+PHP+MySQL)
-
Redis入门(介绍、搭建)——Windows、Centos环境
-
在windows下快速搭建web.py开发框架方法
-
[Hadoop] Windows 下的 Hadoop 2.7.5 环境搭建
-
windows环境下如何搭建Consul+Ocelot
-
在windows下搭建汇编编程环境
-
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
-
windows7下php开发环境搭建图文教程