无法打开包含文件:'ntddk.h'

Cannot open include file: 'ntddk.h'

我一直在尝试进入驱动程序开发(排队 "don't do that") 我一直在查看 this msdn page and after installing the WDK (Windows Driver Kit) 10 我仍然无法编译他们在该页面上使用的示例。

我查看了其他SO questions,但我无法找到WDK 的安装目录。当我尝试 运行 设置时,我遇到了这样的问题:

我该如何解决这个问题?

经验法则

当您需要使用最新(或特定)版本的 WDK 进行构建时,请检查是否安装了相应版本的 Win SDK。

疑似原因

在调试问题的过程中,似乎(由于 SDK 版本)构建过程将 $(LatestTargetPlatformVersion) 设置为 10.0.10586。而安装的 WDK 仅为 10.0.14393 版本提供所需版本的构建文件。看起来这是某种有意为之的行为。

我的案例

在我的例子中,这是由于 不同版本的 Win SDK 和 WDK。 我有 SDK 10.0.10586 和 WDK 10.0.14393。 安装 SDK 10.0.14393 解决了我的问题。

旁注

Win SDK 使用 VS2015 的默认布局安装,但由于某种原因它在 VS 更新过程中没有获得更新。

您需要将 WDK headers 路径添加到您的 vcxproj 包含目录:
vcxproj 属性 -> C/C++ -> 常规 -> 附加包含目录

C:\Program Files (x86)\Windows Kits\Include.0.14393.0\km\

P.S.: 确保将 SDK 10 与 WDK 10 一起安装。
P.P.S: 没有SDK你会得到Cannot open include file: 'ntdef.h'错误

有一个宏 $(DDK_INC_PATH) 可以添加到项目的包含目录中(vcxproj 属性 -> VC++ 目录 -> 包含目录)

通过在项目属性 -> 常规下的 Visual Studio 中选择不同的 "Windows SDK Version" 解决了这个问题。

在目录 C:\Program Files (x86)\Windows Kits\Include 中,我有 5 个文件夹,其中包含 Windows 个 SDK。最新的 (10.0.17763.0) 没有 km 子文件夹。在 Visual Studio 中将 Windows SDK 版本从 10.0.17763.0 更改为 10.0.17134.0 后,发现 ntddk.h header。

我也遇到了类似的问题。以下对我有用:

第 1 步:了解您要为其开发驱动程序的目标 Windows 平台。您可以通过查看设置->系统->关于->Windows 规格

来检查系统上的 'Windows Version'

第 2 步:确保安装兼容的 "Windows SDK" 和 "WinSDK" 匹配目标 windows 平台版本。

步骤 3:验证 "ntddk.h" 存在于 $(DDK_INC_PATH)。此预处理器宏的计算结果通常为 "C:\Program Files (x86)\Windows Kits\Include\km"。如果您没有看到 'km' 文件夹,请仔细点击上面第 2 步中提到的链接。

步骤 4:验证项目属性 -> 配置属性 -> 常规 -> 平台工具集正在使用 "WindowsKernelModeDriver"。

如果您尝试在新系统上构建,那么也许首先尝试将解决方案重新定位到该系统

如果这不起作用,则查找子文件夹 KM - 在上述一些解释中提到,然后尝试通过更改 $(LatestTargetPlatformVersion)

重新定位到该版本

希望您能够使用 ntddk.h 文件进行构建 注意!请记住,这将强制您的解决方案构建到该特定平台,如果您尝试在另一个平台上构建,那么您将不得不再次手动更改它。更好的解决方案是进行某种预构建步骤来处理丢失的 SDK 并安装它,但是我没有这样的解决方案 - 任何一个?