文章目录

  • 前言
  • 步骤
    • 步骤一
    • 步骤二
    • 步骤三
    • 连接测试
    • 步骤四
    • 步骤五
  • 总结

前言

作为一个编写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 双机调试也是最省配置的。

Windows编程—Windows驱动开发环境搭建相关推荐

  1. Windows Server 2012 +WDK7600.16385.1+VS2010驱动开发环境搭建

    本帖通过Augusdi的一篇博文进行重新总结 第一步:安装Visual stdio 2010 1.安装VS2010 第二步:安装WDK安装包 2.安装WindowsDriverKit7-GRMWDK_ ...

  2. Windows Server 2012 +WDK7600.16385.1+VS2008驱动开发环境搭建

    这个配置相较与Windows Server 2012 +WDK7600.16385.1+VS2010驱动开发环境搭建 要简单的多,不需要每次创建驱动工程时配置这么多的参数 下载WDK开发安装包,我已经 ...

  3. windows驱动开发环境搭建以及helloworld

    文章目录 前言 编译环境-WDK的安装 搭建测试驱动的虚拟机 win11虚拟机 win10虚拟机 在测试机器上运行驱动 修改注册表-显示调试信息 上面驱动代码含义 测试证书签名 其他 旧版本的visu ...

  4. vs2010 wdk c语言,Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建.doc

    Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建.doc [置顶]Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建(菜鸟的经验) 分类: 驱动开发 ...

  5. Windows驱动开发环境搭建:VS2013+WDK8.1

    你的Windows驱动开发环境之所以搭建不成功,是因为你没有看这篇博客 1.安装包准备 Visio Studio2013: https://pan.baidu.com/s/1P77yeSKuE7mWl ...

  6. MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题)...

    网上有一篇shangdong_chu网友写的文章介绍如何在Eclipse上配置MonkeyRunner,做了挺好的一个描述,但经过我的试验在我的环境上碰到了Jython解析器出错的问题,且该文章缺少P ...

  7. Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种...

    2019独角兽企业重金招聘Python工程师标准>>> 今天为在Windows下建立PHP开发环境,在考虑下载何种PHP版本时,遭遇一些让我困惑的情况,为了解决这些困惑,不出意料地牵 ...

  8. windows10 驱动开发环境搭建vs2019 helloworld

    因为特殊原因需要搭建win10驱动环境, 因此学习了一下 但是发现win10环境特别麻烦 vs2022已经出来了,但是没看到驱动支持, 因此还是选择vs2019 提前准备 1 查看系统版本 2 下载v ...

  9. windows XP 驱动开发环境搭建

    1.需要安装的软件: 在Windows XP的基础上,安装顺序: 先装上VC++6.0,再装DDK2600(也就是DDK的XP版),最后装 Driver Studio 3.2. 下载地址: XP系统的 ...

最新文章

  1. 文件列表出现分页按钮
  2. 创建一个简单的存储过程(RroGetA_Z),要求输出A到Z之间的26个大写字母
  3. 网站服务器c盘在哪找,云服务器c盘在哪儿
  4. auto drop ssh failed ip address
  5. ios android 内存不足,怎样解决手机内存不足?iOS系统可以试试这些方法
  6. Oracle的UNION函数
  7. linux下网络排错与查看
  8. python入坑指南_Rust入坑指南:万物初始
  9. 《Adobe Photoshop CS6中文版经典教程》—第1课1.4节在Photoshop中还原操作
  10. CCCC-GPLT L1-033. 出生年 天梯赛
  11. gx works2产品id_gx works2中文版下载|
  12. 各类曲线的参数方程_曲线的参数方程
  13. matlab符号运算变量替换成小数时避免出现分数的小技巧
  14. 一段集大成的thymeleaf代码
  15. 自媒体多账号发布工具大全,快来看看
  16. 正则匹配过滤字母和数字
  17. 最全小说资源网——连载阅读升级版(亲测好用)
  18. [CodeChef Trips]Children Trips
  19. Python excel提取表格信息整理到word中
  20. 消息队列Rabbitmq,在Node.js中的应用

热门文章

  1. “不务正业”的化学奖又发给了生物
  2. python脚本转lua_初次使用Python脚本,proto协议文件转Lua代码
  3. 【ES6(2015)】新的声明方式 let、const
  4. Qt笔记-waitForBytesWritten需要注意的地方
  5. Spring Boot笔记-validation的使用及统一异常处理
  6. TCP/IP笔记-ARP协议包结构相关笔记
  7. OpenCV文档阅读笔记-inRange官方解析及实例
  8. QML中的import与C++中的区别与联系
  9. Qt creator5.7 OpenCV249之pyrDown函数(含源码下载)
  10. python list 底层_深入Python列表的内部实现