jzw00101 发表于 2022-8-12 21:00

简单修改使WDK 22H2(VS2022)兼容旧版WDK10

本帖最后由 jzw00101 于 2022-8-12 21:04 编辑

VS2022 更新了众多功能和特性,如64位 IDE、MSVC v143等,然而该版本只支持最新版的 WDK(22H2/10.0.22621),新版本砍掉了众多编译支持(https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk)。为了在 VS2022 中更愉快地写驱动,并让它尽可能兼容旧工程的编译,我们可以对WDK做一些patch。。


修改前请注意备份!!


1. 支持32位以及 Win7~8.1 的 target

修改 C:\Program Files (x86)\Windows Kits\10\build\10.0.22621.0\WindowsDriver.Common.targets(假定WDK安装在64位系统的默认目录中)
搜索 '$(DDKPlatform)' == 'x86' or '$(DDKPlatform)' == 'ARM')
删除选中部分:


2. 取消 ExAllocatePool、ExAllocatePoolWithTag 等函数的警告

修改 C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\km\wdm.h
搜索 use ExAllocatePool2
删除 __declspec(deprecated(xxx)) 和 __drv_preferredFunction(xxx),如:


3. 解决默认编译输出在 Win7 下加载蓝屏

    1. 修改 Target OS Version 为 Windows 7

    2. 删除 C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\km\x64\bufferoverflowfastfailk.lib,复制一份同目录下的 BufferOverflowK.lib 并重命名为 bufferoverflowfastfailk.lib

    3. 关闭栈保护(不推荐):工程属性 > C/C++ > Code Generation > Security Check > Disable

根本原因:

默认生成的代码中 security_init_cookie 不负责初始化 security cookie,而Win7的加载器还不支持初始化 security cookie,从而导致蓝屏。

iawyxkdn8 发表于 2022-8-13 09:04

谢谢分享!

276585877 发表于 2022-8-30 10:08

win7 蓝屏没出现 ,但有几个 小bug

virsnow 发表于 2022-10-3 16:13

感谢,正好有需要,非常感谢~

丢你雷姆加拉姆 发表于 2022-11-21 00:46

谢谢大佬成功解决了win7蓝屏但是win11又加载不了驱动了为啥

Amreankerboy 发表于 2024-1-26 01:07

老哥可以发一份修改后wdm文件吗,我改完有更多错误了

coody 发表于 2024-3-13 14:37

有个完整版的下载地址ma?
页: [1]
查看完整版本: 简单修改使WDK 22H2(VS2022)兼容旧版WDK10