私は現在、Windows Native API、Nt*/Zw*
メソッドを調査しています。WDK をダウンロードしてインストールし、アプリケーション (x64、Win 8.1 x64、VS2013) を正常にコンパイルしました。それが行う唯一のことは、への呼び出しNtOpenFile()
です。
正常にコンパイル/リンクするには、プロジェクトのプロパティ (テンプレート Application For Drivers) に次の変更を加える必要がありました。
- WDK からインクルード フォルダーを追加する
- WDK から Lib フォルダーを追加する
- ntoskrnl.lib を使用するようリンカーに指示する
予期せず、デバッガーを実行すると、「C:\Windows\SYSTEM32\werkernel.sys がコンピューターにないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてください。」というエラー メッセージが表示されます。werkernel.sys は明らかに system32\drivers に存在します。
編集:明確にするために、アイコンをダブルクリックしてアプリを起動すると、前述のエラーも発生します。
このロードは、コードの前に発生します。問題のファイルのインターネットやプロジェクト プロパティのどこにも何も見つかりません。要約すると、これまでのところ次のような質問があります。
- アプリケーションで werkernel.sys が読み込まれるのはなぜですか?
- System32 からロードされているのはなぜですか?
可能であることは理解していますがmklink werkernel.sys drivers\werkernel.sys
、何かひどく間違ったことをしているように感じます。