无法打开包含文件:'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 平台版本。
- 对于Windows10,版本1903遵循https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
- 对于以前的平台,请遵循 https://docs.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads
步骤 3:验证 "ntddk.h" 存在于 $(DDK_INC_PATH)。此预处理器宏的计算结果通常为 "C:\Program Files (x86)\Windows Kits\Include\km"。如果您没有看到 'km' 文件夹,请仔细点击上面第 2 步中提到的链接。
步骤 4:验证项目属性 -> 配置属性 -> 常规 -> 平台工具集正在使用 "WindowsKernelModeDriver"。
如果您尝试在新系统上构建,那么也许首先尝试将解决方案重新定位到该系统
如果这不起作用,则查找子文件夹 KM - 在上述一些解释中提到,然后尝试通过更改 $(LatestTargetPlatformVersion)
重新定位到该版本
希望您能够使用 ntddk.h 文件进行构建
注意!请记住,这将强制您的解决方案构建到该特定平台,如果您尝试在另一个平台上构建,那么您将不得不再次手动更改它。更好的解决方案是进行某种预构建步骤来处理丢失的 SDK 并安装它,但是我没有这样的解决方案 - 任何一个?
我一直在尝试进入驱动程序开发(排队 "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 平台版本。
- 对于Windows10,版本1903遵循https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
- 对于以前的平台,请遵循 https://docs.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads
步骤 3:验证 "ntddk.h" 存在于 $(DDK_INC_PATH)。此预处理器宏的计算结果通常为 "C:\Program Files (x86)\Windows Kits\Include\km"。如果您没有看到 'km' 文件夹,请仔细点击上面第 2 步中提到的链接。
步骤 4:验证项目属性 -> 配置属性 -> 常规 -> 平台工具集正在使用 "WindowsKernelModeDriver"。
如果您尝试在新系统上构建,那么也许首先尝试将解决方案重新定位到该系统
如果这不起作用,则查找子文件夹 KM - 在上述一些解释中提到,然后尝试通过更改 $(LatestTargetPlatformVersion)
重新定位到该版本希望您能够使用 ntddk.h 文件进行构建 注意!请记住,这将强制您的解决方案构建到该特定平台,如果您尝试在另一个平台上构建,那么您将不得不再次手动更改它。更好的解决方案是进行某种预构建步骤来处理丢失的 SDK 并安装它,但是我没有这样的解决方案 - 任何一个?