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

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

适用于 Windows 11 版本 24H2 的 WDK

x86 内核模式驱动程序开发

从 Windows 11 版本 24H2 开始,WDK 不再支持 x86 内核模式驱动程序开发。 如果你需要开发 x86 内核模式驱动程序,请使用 WDK 版本 23H2

预配后重启

预配和部署后,目标计算机无法在部署步骤后重新启动。

ARM64 WDK 驱动程序 SxS 支持

当 Windows 11 版本 24H2 工具包和 Windows 11 版本 22H2 工具包都安装在 ARM64 计算机上时,为 ARM64 生成内核模式驱动程序框架 (KMDF) 驱动程序并将 TargetPlatformVersion 设置为 Windows 11 版本 22H2 会失败,并且会出现 WdfDriverEntry.lib(stub.obj) : error LNK2001: unresolved external symbol

WDK 扩展安装失败

如果使用 Visual Studio 版本 17.11.0 或更高版本,请在 WDK 安装中取消选中安装扩展复选框。

适用于 Windows 11 版本 22H2 的 WDK

启动时的服务错误

如果在 2022 年 5 月至 8 月(版本 10.0.22621.1)之间安装了原始 Windows 11 版本 22H2 WDK,则当使用 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。

Windows 驱动框架 (WDF) 可再发行安装程序不起作用

不再支持 WDF 可再发行组件共同安装程序。 这会导致安装了 Windows 11 版本 22H2 WDK 和旧版 WDK 的计算机上出现问题。 尝试在此类系统上生成 WDF 1.11 驱动程序时,msbuild 会失败。 生成失败,因为 msbuild 找不到 WDF 共同安装程序。

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

适用于 Windows 10 版本 2004 的 WDK

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

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

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

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

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

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

找不到与目标“10.0.19041.0”对应的 WDK。

当将[Windows SDK 版本]选择为“10.0(最新安装版本)”并使用 WDK 10.0.19041.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 assembl.
'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 测试资源管理器运行设备基础测试时,驱动程序验证程序不会启用/禁用。

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

WDK Windows 10(版本 2004)和 WDK Windows 10(版本 1903 或 1803)的并排安装

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

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

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

在适用于 Windows 10 版本 1809 的 WDK 中,为了支持 Windows 10 版本 1809,对 WDTF 进行了一些更改。 这样做的结果是,WDTF 将不再在下层 OS 上运行。 Windows 10 版本 2004 的 WDK 继续保持了这一变化。

下层测试的替代方法

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

APIValidator

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

解决方法:

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

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

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

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

安装 WDK 时,Visual Studio 会生成错误信息,提示已安装插件组件

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

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

FAQ

如何判断我所使用的 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 之上,则刷新的版本将覆盖原始版本。 注意:在此情况下,“添加或删除程序”会列出两个版本。