Windows 驱动程序工具包 (WDK) 已知问题

本主题详细介绍了有关 WDK 的已知问题。

适用于 Windows 11 版本 22H2 的 WDK

启动时出现服务错误

如果你在 2022 年 5 月至 2022 年 8 月之间安装了原始 Windows 11 版本 22H2 WDK(版本 10.0.22621.1),则使用 WDK 启动 Visual Studio 时可能会出现以下错误消息。

Microsoft.Windows.Tools.WinIDE.Debugger.DebuggerPackage, DebuggerPackage, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null 未正确加载。

此问题已在 WDK 版本 10.0.22621.382 中修复。 可以卸载 WDK,然后按照 下载 Windows 驱动程序工具包中的说明重新安装最新的 WDK。

Visual Studio 中的调试程序不起作用

将 Visual Studio 2022 版本 17.2.0 和 17.3 与 Windows 11 版本 22H2 WDK (10.0.22621.382) 一起使用时,无法在 Visual Studio 界面中调试驱动程序。 若要解决此问题,请执行下列操作之一:将 Visual Studio 更新到 17.4.1 或更高版本,使用 WinDbg 进行调试,或使用早于 17.2.0 的 Visual Studio 版本。 以下错误消息与此问题相关:

必须在 UI 上调用 QueryBuildManagerBusyEx。

WDF 可再发行共同安装程序不起作用

从这个版本开始,不再支持 WDF 可再发行共同安装程序。 具体而言,在同时具有 Windows 11 版本 22H2 WDK 和旧版 WDK 的计算机上,生成 WDF 1.11 驱动程序时,msbuild 会失败,因为它找不到 WDF cointaller。

为了解决此问题,请在安装 Windows 11 版本 22H2 WDK 之前,先备份文件夹 \Program files (x86)\windows kit\10\redist\wdf,之后再还原该文件夹。 或者,如果已安装 Windows 11 版本 22H2 WDK,请在单独的计算机上的 WDK 8 可再发行组件上安装 MSI 文件,并将 redist 文件夹复制到上述文件夹。 有关详细信息,请参阅可再发行框架组件

适用于 Windows 10 版本 2004 的 WDK

ExAllocatePoolZero、ExAllocatePoolQuotaZero 和 ExAllocatePoolPriorityZero 函数中的问题已修复

2020 年 5 月,OSR 发现对池分配的自动归零的新下层支持存在一个问题,该问题可能导致在运行 Windows 10 版本 1909 的系统上,分配未初始化为零。 12 月 16 日,对适用于 Windows 10 版本 2004 的 WDK 和企业版 WDK (EWDK) Windows 10 版本 2004 进行了安全刷新,现已修复此问题。 Microsoft 利用安全刷新并更新了 EWDK,以包含 Visual Studio 生成工具 16.7。 Microsoft 建议所有驱动程序开发人员卸载原始 SDK 和 WDK (版本 2004) 并安装刷新 SDK 和 WDK 或 EWDK。

为了确保存在完整的安全解决方案,已于 11 月发布了针对 Windows 10 版本 1909 的 OS 修补程序,因此,如果创建了具有安全问题的驱动程序,OS 将受到保护。

除了下载更新的 WDK/EWDK 之外,Microsoft 还建议所有驱动程序将所有内核分配切换为使用默认返回零内存的新池清零 DDI。 这将提高驱动程序的安全性和可靠性。 为了帮助实现此转换,Microsoft 创建了静态驱动程序验证程序规则,该规则在 WDK 20236 及更高版本Windows 10预览版中提供。 该规则将标识驱动程序源代码中正在使用旧池分配 DDI 的所有实例,并建议将它们替换为更安全的新等效 DDI。 此规则适用于基于 WDM、WDF 和 NDIS 的驱动程序。

安装 WDK 不再为所有 C++ 项目启用 Spectre 缓解,如 WDK 1903 中所示

虽然 WDK 安装将默认为所有驱动程序启用 Spectre 缓解,但它不再为所有 C++ 项目启用它们。

错误“找不到对应于目标'10.0.19041.0'的 WDK。”

在 WDK 10.0.19041.0 中选择“10.0 (最新安装的版本) ”时,即使安装了 SDK 版本,也会导致“找不到与目标版本 '10.0.19041.0' 对应的 WDK”错误。

解决 方案: 在驱动程序项目的属性页 (配置属性 >常规) 将 Windows SDK 版本设置为 $ (LatestTargetPlatformVersion) 。 如果此选项不可用,请选择“ 继承自父级”或“项目默认值”选项。

服务器上运行的 EWDK 和 SDV 具有 .NET 要求

从 EWDK 运行静态驱动程序验证程序需要 .Net Framework 4.7.2。 根据系统上的 Windows 版本,可能已安装、已安装但需要启用或未安装 .NET。 有关安装的 .NET 版本或 .NET 安装状态的详细信息,请查看.NET Framework版本和依赖项

DVL 生成失败,出现 System.IO.FileNotFoundException

尝试 (DVL) 创建驱动程序验证日志时,将显示以下错误:

Unhandled Exception: System.IO.FileNotFoundException: 
Could not load file or assembly 
'System.Runtime, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 
or one of its dependencies. 
The system cannot find the file specified.

这可以在命令行和 GUI 环境中发生。 此问题在 WDK 的未来版本中已解决,可在Windows Insider Preview WDK 中查看。 遗憾的是,当前版本没有解决方法。

如果未安装 VS,则 SDV 在 EWDK 中失败

作为 Visual Studio 的一部分,SDV 依赖于 VCRUNTIME140D.dll。 因此,在未安装 VS 的计算机上运行 EWDK 将失败。 在计算机上安装 Visual Studio 以解决此问题。

使用 WDK 测试资源管理器时,驱动程序验证程序未启用/禁用

使用 WDK 测试资源管理器运行设备基础测试时,驱动程序验证程序不会启用/禁用。

解决 方案: 在客户端计算机上,按照这些说明手动启用/禁用驱动程序验证程序。

Windows 10版本 2004 和 WDK Windows 10版本 1903 或版本 1803 的 WDK 并行安装

在同一台电脑上安装这两个版本的工具包后,“部署驱动程序”功能不适用于较旧版本。

解决 方案: 如果需要部署驱动程序功能,请在单独的计算机上使用 1803。

Windows 设备测试框架 (WDTF) 测试现在仅在与 WDK 版本匹配Windows 10的系统上运行

在 WDK for Windows 10 版本 1809 中,为了支持此版本的 Windows 10 版本 1809,对 WDTF 进行了更改。 这样做的效果是 WDTF 将不再在下层 OS 上运行。 WDK for Windows 10 版本 2004 继续更改。

用于下级测试的更改

WDK 中适用于 Windows 10 版本 1803 的 WDTF 测试可以在以前的 Windows 版本上运行。

APIValidator

在 x86 Arch 计算机上,APIValidator 无法针对 x64 二进制文件运行。 如果在 x86 计算机上生成 x64 驱动程序,应关闭 APIValidator。

解决方法:

  1. 转到驱动程序解决方案的属性页。

  2. 依次选择“ APIValidator”、“ 常规”,然后将 “运行 ApiValidator ”从 “是 ”更改为 “否”。

在 Windows 7 系统上运行的 WDK 需要 KB 3033929

在运行 Windows 7 的系统上安装 WDK 之前,必须先安装 Microsoft 安全公告3033929 (KB3033929) 。 可以从 Microsoft 下载中心下载KB3033929。

安装 WDK 会从 Visual Studio 生成一个错误,指出已安装加载项组件

如果 WDK 已卸载,但未卸载 Visual Studio 的 WDK 驱动程序扩展,则可以看到此错误消息。

分辨率: 在 Visual Studio 中,转到 “扩展 ”下拉菜单,选择“ 管理扩展”,选择 “Windows 驱动程序工具包”,然后单击“ 卸载”。

常见问题解答

如何实现判断我拥有的 WDK 或 EWDK 版本是否包含池分配归零的修补程序?

“系统设置”中 ,转到“ 添加或删除程序”,搜索 “Windows 驱动程序工具包 ”并记下版本。 Windows 10版本 2004 的原始 WDK 的版本为 10.0.19041.1,刷新的 WDK 版本为 10.0.19041.685 对于 EWDK,启动 EWDK 环境后,请查看命令窗口的标题。 刷新的版本将包含 vb_release_svc_prod1.19041.685。 此外,查看环境变量时, BuildLab 变量应显示 vb_release_svc_prod1.19041.685

Windows 软件开发工具包 (SDK) 也已刷新,这是否也是必需的?

否,但是更新的 Windows 软件开发工具包 (SDK) 包含 onecore.lib 的修补程序,该修补程序可能很好。 此外,通常最好保持 SDK 和 WDK 的一致性。

如果已安装适用于 Windows 10 版本 2004 的 WDK,是否需要在安装刷新的版本之前将其卸载?

强烈建议卸载原始 2004 SDK 和 WDK,并安装安全刷新 SDK 和 WDK。 也就是说,如果刷新的 WDK 安装在原始 WDK 之上,则刷新的版本将覆盖原始版本。 注意:在此方案中“添加或删除程序”中,将列出这两个版本。