Cannot open include file: 'ntddk.h'

29,332

Solution 1

You need to add WDK headers path to your vcxproj include directories:
vcxproj properties -> C/C++ -> General -> Additional Include Directories

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

P.S.: Make sure you install SDK 10 together with WDK 10.
P.P.S: Without SDK you will get Cannot open include file: 'ntdef.h' error

Solution 2

Solved it by selecting a different "Windows SDK Version" in Visual Studio under Project Properties -> General.

In the directory C:\Program Files (x86)\Windows Kits\10\Include I have 5 folders with Windows SDKs. The newest (10.0.17763.0) did not have a km subfolder. After changing the Windows SDK Version from 10.0.17763.0 to 10.0.17134.0 in Visual Studio the ntddk.h header was found.

Solution 3

Rule of thumb

When you need to build with the latest (or specific) version of WDK, check that corresponding version of Win SDK is installed.

Suspected cause

In process of debugging the issue it appeared that (because of SDK version) build process was setting $(LatestTargetPlatformVersion) to 10.0.10586. While the installed WDK provides needed versions of build files only for 10.0.14393 version. Looks like this is somewhat intended behavior.

My case

In my case it was due to different versions of Win SDK and WDK. I had SDK 10.0.10586 and WDK 10.0.14393. Installing SDK 10.0.14393 solved the issue for me.

Side note

Win SDK gets installed with default layout of VS2015, but for some reason it doesn't get updates in process of VS updates.

Solution 4

I also faced the similar problem. Below worked for me:

Step 1: Aware of Targeted Windows Platform for which you are going to develop driver. You can check 'Windows Version' on your system by looking at Settings->System->About->Windows Specification

Windows Specification

Step 2: Make sure you install compatible "Windows SDK" and "WinSDK" matchingto targeted windows platform version.

Step 3: Verify "ntddk.h" exists at $(DDK_INC_PATH). This pre-processor macro typically evaluates to "C:\Program Files (x86)\Windows Kits\10\Include\\km". If you do not see 'km' folder then carefully follow the links mentioned in step 2 above.

"km" folder availability

Step 4: Verify Project Properties -> Configuration Properties -> General -> Platform Toolset is using "WindowsKernelModeDriver" .

Platform Toolset

Solution 5

There is a macros $(DDK_INC_PATH) that can be added to include directories of your project (vcxproj properties -> VC++ Directories -> Include Directories)

Share:
29,332
Ezzy
Author by

Ezzy

Mobile developer, aka self-harm enthusiast.

Updated on March 17, 2020

Comments

  • Ezzy
    Ezzy about 4 years

    I'm been trying to get into driver development (queue the "don't do that") I have been looking at this msdn page and after installing the WDK (Windows Driver Kit) 10 I am still unable to compile the example that they use on that page.

    I have looked at other SO questions but I am unable to find the installed directory of the WDK. When I attempt to run the setup I am greeted by this: WDK Setup image

    How can I solve this?

    • Anya Shenanigans
      Anya Shenanigans about 8 years
      Firstly - is the file on your computer - use the search utility to find the ntddk.h file. Generally you need to configure your project to point to the DDK - this is a project configuration. You've not provided a lot of information barring 'the DDK seems to be installed' here.
    • Ezzy
      Ezzy about 8 years
      Sorry, I should've mentioned that searching for the file yields no result. I find this weird since it says the WDK is installed.
    • Ezzy
      Ezzy about 8 years
      You missed the first thing you see when you look through SO questions. The title. @HansPassant
    • Anya Shenanigans
      Anya Shenanigans about 8 years
      I had to manually trawl for the file, but it was in c:\program files (x86)\Windows Kits\10\Include\10.0.10586.0\km. You're probably missing some settings in the example to get it to work
    • Ezzy
      Ezzy about 8 years
      You're a god send @Petesh I have no idea why this does not show up when I search for it even. Thank you!
    • Giuseppe Guerrini
      Giuseppe Guerrini about 8 years
      It seems to be a quite common issue. The "sample driver" created by VS is expected to be ready to compile, but it isn't :-(
    • Giuseppe Guerrini
      Giuseppe Guerrini about 8 years
      @Petesh: I have exactly the same problem, my guess is there is a bug in latest WDK installer. But your workaround works, it could become an official answer instead of a simple comment (and I'd vote for it)
    • SonarJetLens
      SonarJetLens over 7 years
      This appears to be a serious problem with the latest WDK. I installed 10.0.14393.0 (fresh) and even creating an empty kernel mode driver project fails to set up the include directories properly. Hand crafting it doesn't seem to help either as it complains about 10.0.14393.0 not being installed. Or have any of you had any luck..?
    • SonarJetLens
      SonarJetLens over 7 years
      ..I think there's something foobared; I tried to install the 10.0.14393.0 Windows SDK (not the WDK) and it failed claiming "insufficient privileges" - and that's running as Admin. Something ain't right I tell you...
  • kayleeFrye_onDeck
    kayleeFrye_onDeck almost 7 years
    The versions of the WSDK and WDK don't always match.
  • kayleeFrye_onDeck
    kayleeFrye_onDeck almost 7 years
    You're hard-coding your SDK path, which is not automation-friendly for remote build systems.
  • serup
    serup about 4 years
    how is this macro focusing? I noticed in my case, that it was pointing to a version which did not have the subfolder KM