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

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

适用于 Windows 11 版本 24H2 的 WDK

预配后重启

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

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 月至 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 硬安装程序而失败。

为了解决此问题,请在安装 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 发现,在运行 1909 版本 Windows 10 的系统上,对池分配自动清零的新层级支持存在一个问题,可能导致分配无法清零初始化。 通过 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,也会导致“找不到与目标版本‘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 测试资源管理器运行设备基本测试时,不会启用/禁用驱动程序验证程序。

解决方法: 在客户端上,按照以下说明手动启用/禁用驱动程序校验程序。

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 arch 机器上,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 驱动程序工具包”,然后单击“卸载”。

常见问题解答

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