web-dev-qa-db-ja.com

インクルードファイルを開けません: 'ntddk.h'

私はドライバ開発に参加しようとしています( "それをしないでください"をキューに入れます) このmsdnページ を見ていて、 WDK(Windows Driver Kit)をインストールした後1 彼らがそのページで使用する例をコンパイルすることはまだできません。

他の SOの質問 を見ましたが、WDKのインストールディレクトリが見つかりません。セットアップを実行しようとすると、次のメッセージが表示されます。 WDK Setup image

どうすればこれを解決できますか?

13
Ezzy

VcxprojインクルードディレクトリにWDKヘッダーパスを追加する必要があります。
vcxprojプロパティ-> C/C++->一般->追加のインクルードディレクトリ

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

PS:WDK 10と一緒にSDK 10をインストールしてください。
P.P.S:SDKなしではCannot open include file: 'ntdef.h'エラー

9

経験則

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の更新中に更新が取得されません。

3
IsXanDe

Visual Studioの[プロジェクトプロパティ]-> [全般]で別の「Windows SDKバージョン」を選択することで解決しました。

ディレクトリC:\Program Files (x86)\Windows Kits\10\Includeには、Windows SDKを含む5つのフォルダーがあります。最新(10.0.17763.0)にはkmサブフォルダーがありませんでした。 Visual StudioでWindows SDKバージョンを10.0.17763.0から10.0.17134.0に変更した後、ntddk.hヘッダーが見つかりました。

1
David

私も同様の問題に直面しました。以下は私のために働きました:

ステップ1:ドライバーを開発する対象のWindowsプラットフォームを認識します。システムの「Windowsバージョン」は、「設定」->「システム」->「バージョン情報」->「Windows仕様」で確認できます。

Windows Specification

ステップ2:ターゲットのWindowsプラットフォームバージョンに一致する互換性のある「Windows SDK」および「WinSDK」をインストールしてください。

ステップ3:$(DDK_INC_PATH)に「ntddk.h」が存在することを確認します。このプリプロセッサマクロは通常、「C:\ Program Files(x86)\ Windows Kits\10\Include \\ km」と評価されます。 「km」フォルダが表示されない場合は、上記のステップ2で述べたリンクを注意深くたどってください。

"km" folder availability

ステップ4:プロジェクトのプロパティ->構成プロパティ->全般->プラットフォームツールセットが「WindowsKernelModeDriver」を使用していることを確認します。

Platform Toolset

1
learningstack

プロジェクトのディレクトリを含めるために追加できるマクロ$(DDK_INC_PATH)があります(vcxprojプロパティ-> VC++ディレクトリ->ディレクトリを含める)

1
Andrew Ivanov

新しいシステムを構築しようとする場合、おそらく最初にソリューションをそのシステムに再ターゲットすることを試みます

enter image description here

これが機能しない場合は、サブフォルダーKMを探します-上記の説明のいくつかで言及されているので、$(LatestTargetPlatformVersion)を変更して、そのバージョンにターゲットを変更してみます

enter image description here

うまくいけば、ntddk.hファイルNBでビルドできるはずです!これにより、ソリューションがその特定のプラットフォームにビルドするように強制され、別のプラットフォームでビルドしようとすると、手動で再度変更する必要があることに注意してください。より良い解決策は、不足しているSDKを処理してインストールする、ある種の事前構築ステップを作成することですが、私にはそのような解決策はありません-いずれか?

0
serup