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

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

适用于 Windows 11 版本 24H2 的 WDK

预配后重启

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

ARM64 WDK 驱动程序 SxS 支持

当 Windows 11 版本 24H2 工具包和 Windows 11 版本 22H2 工具包都安装在 ARM64 计算机上时,生成一个将 TargetPlatformVersion 设置为 Windows 11 版本 22H2 的 ARM64 的 KMDF 驱动程序时,版本 WdfDriverEntry.lib(stub.obj) : error LNK2001: unresolved external symbol22H2 将失败。

适用于 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 和适用于 Windows 10 版本 2004 的企业 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 不再为所有C++项目启用 Spectre 缓解措施,如 WDK 1903 所示

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

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

使用 WDK 10.0.19041.0 选择 “10.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 预览体验成员预览版 WDK 中看到。 遗憾的是,当前版本不存在解决方法。

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

SDV 在 Visual Studio 中依赖于VCRUNTIME140D.dll。 因此,在没有 VS 安装的计算机上运行 EWDK 将失败。 在计算机上安装 Visual Studio 以解决此问题。

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

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

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

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

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

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

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

在 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 计算机 APIValidator 上生成 x64 驱动程序,则应关闭。

解决方法:

  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 之上,刷新的版本将覆盖原始版本。 注意:在此方案中,将列出这两个版本“添加或删除程序”。