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配置好了。

Windows编程—Windows驱动开发环境搭建_第1张图片

随后添加串行端口。用于主机与调试机通信使用的。

Windows编程—Windows驱动开发环境搭建_第2张图片

步骤三

配置WinDbg

File -> Kernel Debugging -> COM 进行如下配置,端口和波特率要和 虚拟机配置一样。

Windows编程—Windows驱动开发环境搭建_第3张图片

也可以 将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,可以在启动项 那里来回切,这样就停在那里了。此时 调试机 的串口已经启动了,此时可以进行步骤三 进行连接了。

Windows编程—Windows驱动开发环境搭建_第4张图片

此时可以点击 WinXp 调试启动了。

此时WinDbg如下:

Windows编程—Windows驱动开发环境搭建_第5张图片

此时,虚拟机也会被暂停,在kd> g 继续,测试虚拟机正常启动。

在虚拟机中可以加载驱动进行测试,看windbg是否有输出,调试机 连接 windbg 调试,请看步骤五。

Windows编程—Windows驱动开发环境搭建_第6张图片

步骤四

配置系统内核符号表。笔者用的Win XP Sp3 x86版本,下的符号表 WindowsXP-KB936929-SP3-x86-symbols-full-ENU.exe 这个,本来微软可以在线获取符号表,笔者自己测试 貌似没起效果 没有进行在线获取。百度云链接:

链接:https://pan.baidu.com/s/1ABA8qcealpBKr_Op2QF_Pw
提取码:wmi3

笔者这里选择的安装目录时在 C:\symbols。这里一定要注意,我们配置符号表路径 不能直接是根目录,一定得 具体到下面的子目录 才是 pdb路径。

Windows编程—Windows驱动开发环境搭建_第7张图片

在 系统环境路径配置如下:

Windows编程—Windows驱动开发环境搭建_第8张图片

_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

Windows编程—Windows驱动开发环境搭建_第9张图片

步骤五

我们准备一个 测试用的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 
	
// 提供一个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;
}

Windows编程—Windows驱动开发环境搭建_第10张图片

这个路径 要添加到 环境变量_NT_SYMBOL_PATH 或者 WDK中的 sympath中去。

我们把first.sys 拷贝到 虚拟机中,然后使用 monitor,File ->Open Driver first.sys ,然后再File->Start Driver 这时会去装载驱动,然后再File->Stop Driver 这时会去 卸载驱动。

Windows编程—Windows驱动开发环境搭建_第11张图片
Windows编程—Windows驱动开发环境搭建_第12张图片
Windows编程—Windows驱动开发环境搭建_第13张图片
Windows编程—Windows驱动开发环境搭建_第14张图片

总结

作为初学者,建议先把 windbg双机调试模式 搞起来这才是王道,vs集成驱动开发可以后面再搞。笔者认为 win10 + wdk7 + win xp sp3 双机调试也是最省配置的。

你可能感兴趣的:(【Windows编程】,Windows驱动开发,WDK7600_1)