web-dev-qa-db-fra.com

Impossible d'ouvrir le fichier d'inclusion: 'ntddk.h'

J'essaie de me lancer dans le développement de pilotes (file d'attente "Ne faites pas ça") J'ai regardé cette page msdn et après avoir installé le WDK (Kit de pilotes Windows) 1 Je ne parviens toujours pas à compiler l'exemple qu'ils utilisent sur cette page.

J'ai regardé d'autres SO questions mais je ne trouve pas le répertoire installé du WDK. Lorsque j'essaie d'exécuter l'installation, je suis accueilli par ceci: WDK Setup image

Comment puis-je resoudre ceci?

13
Ezzy

Vous devez ajouter le chemin des en-têtes WDK à vos répertoires d'inclusion vcxproj:
propriétés vcxproj -> C/C++ -> Général -> Répertoires Inclure supplémentaires

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

P.S .: Assurez-vous d'installer SDK 10 avec WDK 10.
P.P.S: Sans SDK, vous obtiendrez Cannot open include file: 'ntdef.h' Erreur

9
Sasha Zezulinsky

Règle d'or

Lorsque vous devez créer avec la dernière version (ou spécifique) de WDK, vérifiez que la version correspondante de Win SDK est installée.

Cause suspectée

Au cours du débogage du problème, il est apparu que (en raison de la version du SDK) le processus de génération définissait $ (LatestTargetPlatformVersion) sur 10.0.10586. Alors que le WDK installé fournit les versions nécessaires des fichiers de build uniquement pour la version 10.0.14393. On dirait que c'est un comportement quelque peu voulu.

Mon cas

Dans mon cas, cela était dû à différentes versions de Win SDK et WDK. J'avais SDK 10.0.10586 et WDK 10.0.14393. L'installation du SDK 10.0.14393 a résolu le problème pour moi.

note latérale

Win SDK est installé avec la disposition par défaut de VS2015, mais pour une raison quelconque, il ne reçoit pas de mises à jour en cours de mises à jour VS.

3
IsXanDe

Résolu en sélectionnant une autre "version du SDK Windows" dans Visual Studio sous Propriétés du projet -> Général.

Dans le répertoire C:\Program Files (x86)\Windows Kits\10\Include J'ai 5 dossiers avec les SDK Windows. Le plus récent (10.0.17763.0) n'avait pas de sous-dossier km. Après avoir changé la version du SDK Windows de 10.0.17763.0 à 10.0.17134.0 dans Visual Studio, le ntddk.h l'en-tête a été trouvé.

1
David

J'ai également fait face au même problème. Ci-dessous a fonctionné pour moi:

Étape 1 : Conscient de la plate-forme Windows ciblée pour laquelle vous allez développer un pilote. Vous pouvez vérifier la "version Windows" sur votre système en consultant Paramètres-> Système-> À propos-> Spécifications Windows

Windows Specification

Étape 2 : assurez-vous d'installer des "SDK Windows" et "WinSDK" compatibles avec la version de la plate-forme Windows ciblée.

Étape 3 : Vérifiez que "ntddk.h" existe à $ (DDK_INC_PATH). Cette macro de pré-processeur est généralement évaluée à "C:\Program Files (x86)\Windows Kits\10\Include \\ km". Si vous ne voyez pas le dossier 'km', suivez attentivement les liens mentionnés à l'étape 2 ci-dessus.

"km" folder availability

Étape 4 : Vérifiez les propriétés du projet -> Propriétés de configuration -> Général -> Platform Toolset utilise "WindowsKernelModeDriver".

Platform Toolset

1
learningstack

Il existe une macro $ (DDK_INC_PATH) qui peut être ajoutée pour inclure les répertoires de votre projet (propriétés vcxproj -> Répertoires VC++ -> Inclure les répertoires)

1
Andrew Ivanov

Si vous essayez de construire sur un nouveau système, essayez peut-être d'abord de recibler la solution de ce système

enter image description here

Si cela ne fonctionne pas, recherchez le sous-dossier KM - mentionné dans certaines des explications ci-dessus, puis essayez de recibler vers cette version, en modifiant $ (LatestTargetPlatformVersion)

enter image description here

Avec un peu de chance, vous devriez pouvoir construire avec le fichier ntddk.h NB! Gardez à l'esprit que cela forcera votre solution à s'appuyer sur cette plate-forme spécifique et si vous essayez de construire sur une autre, vous devrez la modifier manuellement à nouveau. Une meilleure solution serait de faire une sorte d'étape de pré-construction qui prend en charge le SDK manquant et l'installe, mais je n'ai pas une telle solution - personne?

0
serup