Windows Driver Kit 是一种彻底集成的驱动程序开发工具包,它包含 WinDDK 用于测试 Windows 驱动器的可靠性和稳定性,本次实验使用的是 WDK8.1 驱动开发工具包,该工具包支持 Windows 7到 Windows 10 系统的驱动开发。安全
VS2013+WDK8.1 驱动开发环境的搭建我研究了很长时间今天总算搭建出来了,并且中途没有错误,这里就把搭建过程分享出来,首先介绍一下个人实验环境:服务器
宿主操做系统:Windows 10 LTSC 企业版
驱动测试环境:Windows 7 x86 企业版
编译器的版本:Visual Studio Express 2013
驱动框架版本:Windows Driver Kit 8.1 (精简)
内核调试工具:WinDBG 10多线程
驱动工具打包连接:https://pan.baidu.com/s/18VIXKdFdfu7ZuKOql7Z_Iw 提取码:9se4框架
首先你须要先安装好Visual Studio 2013
的开发环境,而后再安装Windows Driver Kit 8.1
的驱动开发工具包,这个工具包安装好之后1.5G左右,不过我已经把这个安装包中的关键库文件提取出来了,提取出的文件只有80MB
,直接将提取好的WinDDK.zip
解压缩到指定文件中,并配置环境便可使用,省去了安装WDK的麻烦。工具
1.这里直接把我提取的WinDDK.zip
文件解压缩到C盘根目录下,而后打开Visual Studio
开发工具,按下【Ctrl+Shift+N】新建空项目并输入项目名称为【MyDDK】便可。开发工具
2.依次选择解决方案视图 -> 源文件 -> 添加新建项,或者直接按下【Ctrl + Shift + A】快捷打开菜单,并建立【main.cpp】文件。测试
3.接着咱们须要修改一下配置管理器,添加自定义配置管理,选择【生成】->【配置管理器】->【新建】,此处咱们命名为【MyDDK】便可。优化
4.接着修改一下配置属性中的常规属性,点击菜单栏中的调试,选择【MyDDK属性】->【配置】->【常规】 -> 修改如下几处。操作系统
5.配置可执行文件路径与导入库路径,这里咱们选择 【配置属性】 -> 【VC++目录】依次将以下信息填入配置项,若是须要编译x64位驱动只须要将x86改成x64便可,此处以x86为例。命令行
可执行文件: C:\WinDDK\bin C:\WinDDK\bin\x86 包含目录: C:\WinDDK\Include\km C:\WinDDK\Include\um C:\WinDDK\Include\winrt C:\WinDDK\Include\shared 引用目录+库目录 C:\WinDDK\Lib\win7\km\x86
6.配置【C/C++优化选项】配置属性 -> C/C++ -> 全部选项 -> 依次修改下方几个关键处,若是你须要编译X64驱动需将调用约定改成【__fastcall (/Gr)】而后将预处理器定义中的【X86_改成_AMD64】便可编译64位驱动了,此处以X86配置为例。
安全检查:禁用安全检查 (/GS-) 将警告视为错误:是 (/WX) 警告等级:等级 3 (/W3) 启用C++异常:否 调用约定:__stdcall (/Gz) 优化:已禁用 (/Od) 运行库:多线程调试 (/MTd) 预处理器定义: _X86_;_DDK_;_WIN32_WINNT=0x0501;WINVER=0x0501;_NDEBUG;DBG=0;%(PreprocessorDefinitions)
7.接着须要【配置链接器】选项,选择链接器 -> 全部选项 -> 依次修改下方几个关键处。
附加选项:/IGNORE:4078 /safeseh:no 附加依赖项:ntoskrnl.lib;ndis.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib 固定基址:此处须要为空 忽略全部默认库:是 (/NODEFAULTLIB) 启用增量连接:否 (/INCREMENTAL:NO) 驱动程序:驱动程序 (/Driver) 入口点:DriverEntry 生成清单:否 (/MANIFEST:NO) 生成调试信息:是 (/DEBUG) 生成映射文件:是 (/MAP) 数据执行保护:是 (/NXCOMPAT) 随机基址:此处须要清空 子系统:本机 (/SUBSYSTEM:NATIVE)
8.上方的配置已经基本完成了,接着咱们编写一段驱动初始化代码,而后按下【F7】便可完成驱动的编译。
#include <ntddk.h> VOID UnDriver(PDRIVER_OBJECT driver) { DbgPrint(("Uninstall Driver Is OK \n")); } NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath) { DbgPrint(("hello lyshark \n")); Driver->DriverUnload = UnDriver; return STATUS_SUCCESS; }
9.最后咱们生成一个驱动开发模板,依次选择【文件】->【导出模板】->【项目模板】->【下一步】->【完成】便可完成模板的导出。
此时关闭VS工具,再次打开,就能直接使用咱们的模板来开发驱动了,不须要每次都配置。
WinDBG 是Microsoft公司免费调试器调试集合中的GUI的调试器,支持Source和Assembly两种模式的调试,Windbg不只能够调试应用程序,还能够进行内核调试,结合Microsoft的Symbol Server 能够获取系统符号文件,便于应用程序和内核的调试,接下来咱们将继续完成WinDBG双机调试的配置。
1.首先须要安装VMWare虚拟机,并自行安装好Windows7系统,而后在虚拟机关闭状态下添加一个管道虚拟串口,此处须要删除打印机,不然串口与打印机之间冲突。
操做步骤:编辑虚拟机设置->添加->串行端口->完成
参数配置:使用命名管道->\.\pipe\com_1->该端是服务器另外一端是应用程序->轮询时主动放弃CPU
2.开启虚拟机中的Windows7系统,而后以管理员身份运行CMD命令行,连续执行下方的三条命令,依次创建启动项,并激活调试模式。
Microsoft Windows [版本 6.1.7601] 版权全部 (c) 2009 Microsoft Corporation。保留全部权利。 C:\Users\Administrator>bcdedit /copy {current} /d "Windwos7" 已将该项成功复制到 {2372b00a-f22b-11e9-be45-000c2971b6bf}。 C:\Users\Administrator>bcdedit /debug ON 操做成功完成。 C:\Users\Administrator>bcdedit /bootdebug ON 操做成功完成。 C:\Users\Administrator>bcdedit /timeout 10 操做成功完成。 C:\Users\Administrator>bcdedit /dbgsettings
3.默认状况下Win7下的DbgView不显示内核调试信息,为了方便测试,咱们须要修改一下注册表,新建一个run.reg文件,而后运行并注册。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter] "DEFAULT"=dword:0000000f
4.配置完成后,从新启动系统,在开机的时候选择Windows7 [启用调试程序]则系统会黑屏,说明已经正常进入调试模式了。
5.接着回到物理机上面,咱们在WinDBG所在路径下建立一个Bat文件,这里就叫debug.bat
而后写入如下命令保存,直接运行这个脚本便可。
windbg.exe -b -k com:port=\\.\pipe\com_1,baud=115200,pipe
为了方便调试,能够经过【File菜单】加载符号文件,也能够按下【Ctrl+S】并输入命令 srvc:\symbolshttp://msdl.microsoft.com/download/symbols 自动下载符号保存到C盘下。
到此为止,咱们的内核调试环境已经配置并可以独立工做了,接着咱们编写一个简单的驱动程序,为了能让程序段下来方便调试咱们在程序的开始位置加上__asm{ int 3 }
断点而后让程序执行后自动断下,最终代码以下:
#include <ntddk.h> VOID UnDriver(PDRIVER_OBJECT driver) { DbgPrint(("Uninstall Driver Is OK \n")); } NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver,PUNICODE_STRING RegistryPath) { __asm{ int 3 } // 内联汇编添加 int 3 断点 DbgPrint(("hello lyshark \n")); Driver->DriverUnload = UnDriver; return STATUS_SUCCESS; }
6.如今咱们启动Windows7系统,直接输入g命令便可让Win7跑起来,手动添加符号文件。
按下 Ctrl +S 加入如下符号文件,最后的路径是你驱动编译所在路径。
srv*c:\symbolshttp://msdl.microsoft.com/download/symbols ; C:\MyDDK\MyDDK
当Windows系统加载完成之后,拖入咱们的驱动文件wdk.sys,并经过驱动加载工具加载运行,此时Windows系统会卡死,回到WinDBG中发现已经能够进行源码调试了哈。
不断尝试,最终才成功的(qaqa~头发都掉光了),转载请添加出处,谢谢!