私はドライバ開発に参加しようとしています( "それをしないでください"をキューに入れます) このmsdnページ を見ていて、 WDK(Windows Driver Kit)をインストールした後1 彼らがそのページで使用する例をコンパイルすることはまだできません。
他の SOの質問 を見ましたが、WDKのインストールディレクトリが見つかりません。セットアップを実行しようとすると、次のメッセージが表示されます。
どうすればこれを解決できますか?
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'
エラー
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の更新中に更新が取得されません。
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:ドライバーを開発する対象のWindowsプラットフォームを認識します。システムの「Windowsバージョン」は、「設定」->「システム」->「バージョン情報」->「Windows仕様」で確認できます。
ステップ2:ターゲットのWindowsプラットフォームバージョンに一致する互換性のある「Windows SDK」および「WinSDK」をインストールしてください。
ステップ3:$(DDK_INC_PATH)に「ntddk.h」が存在することを確認します。このプリプロセッサマクロは通常、「C:\ Program Files(x86)\ Windows Kits\10\Include \\ km」と評価されます。 「km」フォルダが表示されない場合は、上記のステップ2で述べたリンクを注意深くたどってください。
ステップ4:プロジェクトのプロパティ->構成プロパティ->全般->プラットフォームツールセットが「WindowsKernelModeDriver」を使用していることを確認します。
プロジェクトのディレクトリを含めるために追加できるマクロ$(DDK_INC_PATH)があります(vcxprojプロパティ-> VC++ディレクトリ->ディレクトリを含める)
新しいシステムを構築しようとする場合、おそらく最初にソリューションをそのシステムに再ターゲットすることを試みます
これが機能しない場合は、サブフォルダーKMを探します-上記の説明のいくつかで言及されているので、$(LatestTargetPlatformVersion)を変更して、そのバージョンにターゲットを変更してみます
うまくいけば、ntddk.hファイルNBでビルドできるはずです!これにより、ソリューションがその特定のプラットフォームにビルドするように強制され、別のプラットフォームでビルドしようとすると、手動で再度変更する必要があることに注意してください。より良い解決策は、不足しているSDKを処理してインストールする、ある種の事前構築ステップを作成することですが、私にはそのような解決策はありません-いずれか?