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

C++ 无法打开包含文件:';ntddk.h';,c++,visual-studio-2015,driver,wdk,C++,Visual Studio 2015,Driver,Wdk,我一直在尝试进入驱动程序开发(排队“不要那样做”) 我一直在看,在安装之后,我仍然无法编译他们在该页面上使用的示例 我已经查看了其他目录,但找不到WDK的安装目录。当我尝试运行安装程序时,我收到以下信息: 我如何解决这个问题?经验法则 当您需要使用最新(或特定)版本的WDK进行构建时,请检查是否安装了相应版本的Win SDK 可疑原因 在调试该问题的过程中,似乎(由于SDK版本的原因)构建过程正在将$(LatestTargetPlatformVersion)设置为10.0.10586。而已安装

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

我已经查看了其他目录,但找不到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头路径添加到vcxproj包含目录:
vcxproj属性->C/C++->常规->其他包含目录

注意:确保将SDK 10与WDK 10一起安装。

P.P.S:如果没有SDK,您将得到
无法打开包含文件:'ntdef.h'
错误

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

通过选择不同的“Windows SDK版本”来解决此问题在Visual Studio中的项目属性->常规下


在目录
C:\ProgramFiles(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
标题。

我也遇到了类似的问题。下面是我的工作:

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

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

  • 对于Windows10,版本1903如下
  • 对于以前的平台,请遵循
步骤3:验证$(DDK_INC_路径)中是否存在“ntddk.h”。此预处理器宏的计算结果通常为“C:\Program Files(x86)\Windows Kits\10\Include\\km”。如果您没有看到“km”文件夹,请仔细遵循上面步骤2中提到的链接

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


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

如果这不起作用,请查找上面一些说明中提到的子文件夹KM,然后通过更改$(LatestTargetPlatformVersion)尝试重新定位到该版本

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

首先-文件在您的计算机上-使用搜索工具查找
ntddk.h
文件。通常,您需要将项目配置为指向DDK-这是一种项目配置。您没有提供很多信息,除非“DDK似乎已安装”。对不起,我应该提到搜索文件不会产生任何结果。我觉得这很奇怪,因为它说安装了WDK。我不得不手动搜索该文件,但它位于
c:\ProgramFiles(x86)\Windows Kits\10\Include\10.0.10586.0\km
中。在示例中,您可能缺少一些使其工作的设置。这似乎是最新WDK的一个严重问题。我安装了10.0.14393.0(新版本),即使创建一个空的内核模式驱动程序项目也无法正确设置include目录。手工制作似乎也无济于事,因为它抱怨10.0.14393.0没有安装。或者你们中有人运气好吗?。我想这是有问题的;我试图安装10.0.14393.0 Windows SDK(而不是WDK),但它未能声明“权限不足”-这是作为管理员运行的。我告诉你有些不对劲…WSDK和WDK的版本并不总是匹配。你正在硬编码SDK路径,这对远程生成系统来说不利于自动化。这个宏如何聚焦?我注意到在我的例子中,它指向一个没有子文件夹KM的版本
C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\km\