【问题标题】:Cannot open include file: 'ntddk.h'无法打开包含文件:“ntddk.h”
【发布时间】:2016-06-17 02:50:10
【问题描述】:

我一直在尝试进入驱动程序开发(排队“不要那样做”) 我一直在查看this msdn page,在安装WDK (Windows Driver Kit) 10 之后,我仍然无法编译他们在该页面上使用的示例。

我查看了其他SO questions,但找不到WDK 的安装目录。当我尝试运行设置时,我受到以下欢迎:

我该如何解决这个问题?

【问题讨论】:

  • 首先 - 是您计算机上的文件 - 使用搜索实用程序查找 ntddk.h 文件。通常您需要将您的项目配置为指向 DDK - 这是一个项目配置。除了“DDK 似乎已安装”之外,您还没有提供很多信息。
  • 对不起,我应该提到搜索文件没有结果。我觉得这很奇怪,因为它说 WDK 已安装。
  • 我不得不手动搜索文件,但它位于c:\program files (x86)\Windows Kits\10\Include\10.0.10586.0\km。您可能在示例中遗漏了一些设置以使其正常工作
  • 这似乎是最新 WDK 的一个严重问题。我安装了 10.0.14393.0(新),甚至创建一个空的内核模式驱动程序项目也无法正确设置包含目录。手工制作它似乎也无济于事,因为它抱怨 10.0.14393.0 未安装。或者你们中的任何人有什么运气..?
  • ..我认为有些东西是 foobared;我尝试安装 10.0.14393.0 Windows SDK(不是 WDK),但它声称“权限不足”失败 - 并且以管理员身份运行。我告诉你有什么不对劲...

标签: c++ visual-studio-2015 driver wdk


【解决方案1】:

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

C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\km\

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

【讨论】:

  • 您在硬编码您的 SDK 路径,这对远程构建系统不适合自动化。
【解决方案2】:

通过在 Visual Studio 中的 Project Properties -> General 下选择不同的“Windows SDK 版本”解决了这个问题。

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

【讨论】:

    【解决方案3】:

    经验法则

    当您需要使用最新(或特定)版本的 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 更新过程中没有得到更新。

    【讨论】:

    • WSDK 和 WDK 的版本并不总是匹配的。
    【解决方案4】:

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

    【讨论】:

    • 这个微距对焦怎么样?我注意到在我的情况下,它指向的版本没有子文件夹 KM
    【解决方案5】:

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

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

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

    第 3 步:验证 $(DDK_INC_PATH) 中是否存在“ntddk.h”。此预处理器宏的计算结果通常为“C:\Program Files (x86)\Windows Kits\10\Include\\km”。如果您没有看到“km”文件夹,请仔细按照上面第 2 步中提到的链接进行操作。

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

    【讨论】:

      【解决方案6】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-11-05
        • 1970-01-01
        • 1970-01-01
        • 2015-01-05
        • 2012-07-10
        • 2019-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多