プロセスにフックしてフォルダーを非表示にするカーネルドライバーを作成しました。外付けハードディスクを接続するまで、このドライバーは非常にうまく機能します。
この時点で、OS (Windows XP または Server 2003) がクラッシュし、ブルー スクリーン (BSOD) が表示されます。
このクラッシュの原因は何ですか? また、ドライバーを修正して解決するにはどうすればよいですか?
プロセスにフックしてフォルダーを非表示にするカーネルドライバーを作成しました。外付けハードディスクを接続するまで、このドライバーは非常にうまく機能します。
この時点で、OS (Windows XP または Server 2003) がクラッシュし、ブルー スクリーン (BSOD) が表示されます。
このクラッシュの原因は何ですか? また、ドライバーを修正して解決するにはどうすればよいですか?
一般的には次の 2 つの方法があります。
ただし、詳細が少なすぎることに同意します。あなたは「フック」ですか?さて、どのように?SSDTフック?または、適切な方法でフィルター ドライバーを記述していますか? フィルタードライバーならどのモデル?ミニフィルターまたは従来のフィルター?
「NtOpenProcess と NtQueryDirectoryFile」をフックしているというコメントに気付きました。SSDT フックのように聞こえます。実装で正確に何をしていますか?不適切な SSDT フックを行うドライバーをたくさん知っています。それは、フックを配置するために使用される方法から始まり、通常、大胆な実装で終わるわけではありません。
ライブ デバッグ用に、WinDbg にはブート時に最新のドライバー バージョンを転送してロードする優れた機能がいくつか用意されていることに注意してください。そのため、特別な準備をしなくても最新バージョンをデバッグできます。リモート エンドのカーネル デバッガーとコンピューターの WinDbg が処理します。
また、OSR (つまり NTDEV) のリストに質問を投稿することもできます。
カーネル ドライバーを開発するときは、通常、カーネル デバッガー接続を使用して仮想マシンでテストします (ホストはデバッガー、VM はデバッグ対象)。仮想マシン環境の中には、デバッグを直接サポートするものがあります。
もちろんその後、さまざまな物理および仮想ハードウェアでデバッグする必要があります。
BSOD の技術的な詳細やコードの仕組みについてはほとんど投稿していないため、具体的な回答を提供することはできません。一般的な出発点として、ミニダンプを分析して、BSOD をトリガーする原因の詳細を確認することをお勧めします。ここに良いスタートガイドがあります。