Windows Driver Kit 是一种完全集成的驱动程序开发系统,它包含Windows Driver Device Kit (DDK),用于测试 Windows 驱动器的可靠性和稳定性,本次实验使用的是WDK8.1 其支持 Windows 7, Windows 8,Windows 10等系统的驱动开发。
WDK环境的搭建研究了很长时间今天总算搭建出来了,而且编译的驱动文件能够被内核加载,这里就把搭建方法分享出来,首先介绍一下我的实验环境:
操作系统:Windows 10 LTSC 2019 企业版
驱动测试环境:Windows 7 x32 企业版 编译器版本:Visual Studio Express 2013 驱动框架版本:Windows Driver Kit 8.1
驱动工具打包: 链接: 提取码:9se4
1.首先你需要安装 WDK工具包,这里我就把它安装在了 F:\Windows Kits
这个盘符下,默认是安装在C盘,安装过程略过,下一步下一步。
2.接着打开VS并新建一个空项目,在空项目中新建wdk文件夹。
3.选择解决方案视图 -> 选择源文件 -> 添加新建项 或者直接按下 (Ctrl + shift + a) 快捷打开,并创建一个 wdk.cpp文件。
4.修改配置管理器,添加配置管理,选择【生成】 -> 【配置管理器】 -> 【新建】,此处可自定义命名。
5.修改配置属性,菜单栏选择【调试】->【wdk属性】 -> 【配置配置】 ->【常规】 -> 修改【 目标文件扩展名:.sys】
6.配置可执行文件路径与导入库路径,这里选择 【配置属性】 -> 【VC++目录】,依次将如下信息填入配置项,如果需要编译64位驱动只需要将x86改为x64即可,以x86为例最终配置结果如下。
可执行文件:F:\Windows Kits\8.1\bin\x86F:\Windows Kits\8.1\bin包含目录:F:\Windows Kits\8.1\Include\kmF:\Windows Kits\8.1\Include\umF:\Windows Kits\8.1\Include\winrtF:\Windows Kits\8.1\Include\shared引用目录+库目录F:\Windows Kits\8.1\Lib\win7\km\x86
7.配置C/C++优化选项:配置属性 -> C/C++ -> 所有选项 -> 依次修改下方几个关键,如果需要编译X64驱动需将调用约定改为__fastcall (/Gr)
然后将预处理器定义中的_X86_
改为_AMD64_
即可,以X86为例。
安全检查:禁用安全检查 (/GS-)将警告视为错误:是 (/WX)警告等级:等级 3 (/W3)启用C++异常:否调用约定:__stdcall (/Gz)优化:已禁用 (/Od)预处理器到文件:否运行库:多线程调试 (/MTd)预处理器定义: _X86_;_DDK_;_WIN32_WINNT=0x0501;WINVER=0x0501;_NDEBUG;DBG=0;%(PreprocessorDefinitions)
8.配置连接器选项,选择连接器 -> 所有选项 -> 依次修改下方几个关键。
附加选项:/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)
9.上方的配置已经基本完成了,接着我们编写一段驱动初始化代码,然后编译发现此时驱动已经编译成功了。
#includeVOID 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;}
10.启动虚拟机中的Win7系统,在开机时按下【F8】,选择禁止强制签名,或者调试模式都可。
11.默认情况下Win7下的 DbgView 不显示内核调试信息,为了方便测试,我们需要修改一下注册表,新建一个reg.reg文件,然后运行并注册,期间需要重启机器。
Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]"DEFAULT"=dword:0000000f
12.将生成的驱动文件 wdk.sys
拖入到虚拟机中,然后同通过工具加载,看是否能够被加载成功,注意:可能导致蓝屏。
加载成功的话,说明我们的驱动文件没有问题了,由于我们编写的是32位驱动,64位系统中是无法运行的。
13.模板文件的生成 -> 依次选择文件 -> 导出模板 -> 项目模板
直接点击完成即可导出,我们可以将模板备份一下,模板路径是 \Visual Studio 2013\My Exported Templates
14.重新启动VS,然后新建项目,就能够直接使用我们定制的驱动开发模板文件了。
不断尝试,最终才成功的(qaqa~头发都掉光了),转载请添加出处,谢谢!