-2

プロセスにフックしてフォルダーを非表示にするカーネルドライバーを作成しました。外付けハードディスクを接続するまで、このドライバーは非常にうまく機能します。

この時点で、OS (Windows XP または Server 2003) がクラッシュし、ブルー スクリーン (BSOD) が表示されます。

このクラッシュの原因は何ですか? また、ドライバーを修正して解決するにはどうすればよいですか?

4

3 に答える 3

1

一般的には次の 2 つの方法があります。

  1. 事後デバッグ。これは通常、クラッシュを再現できるローカル マシンがない場合に行うことです。この場合、クラッシュダンプ ファイル (フル ダンプまたはミニ ダンプ) を調べています。
  2. ライブデバッグ。この場合、システムがクラッシュすることがわかっている場合は、WinDbg を使用してこのマシンを制御し、シリアルまたは FireWire ケーブルを介して接続する 1 台のマシンを準備します。後者ははるかに高速です。

ただし、詳細が少なすぎることに同意します。あなたは「フック」ですか?さて、どのように?SSDTフック?または、適切な方法でフィルター ドライバーを記述していますか? フィルタードライバーならどのモデル?ミニフィルターまたは従来のフィルター?

「NtOpenProcess と NtQueryDirectoryFile」をフックしているというコメントに気付きました。SSDT フックのように聞こえます。実装で正確に何をしていますか?不適切な SSDT フックを行うドライバーをたくさん知っています。それは、フックを配置するために使用される方法から始まり、通常、大胆な実装で終わるわけではありません。

ライブ デバッグ用に、WinDbg にはブート時に最新のドライバー バージョンを転送してロードする優れた機能がいくつか用意されていることに注意してください。そのため、特別な準備をしなくても最新バージョンをデバッグできます。リモート エンドのカーネル デバッガーとコンピューターの WinDbg が処理します。

また、OSR (つまり NTDEV) のリストに質問を投稿することもできます。

于 2011-02-12T15:59:48.780 に答える
1

カーネル ドライバーを開発するときは、通常、カーネル デバッガー接続を使用して仮想マシンでテストします (ホストはデバッガー、VM はデバッグ対象)。仮想マシン環境の中には、デバッグを直接サポートするものがあります。

もちろんその後、さまざまな物理および仮想ハードウェアでデバッグする必要があります。

于 2011-02-12T16:07:47.753 に答える
0

BSOD の技術的な詳細やコードの仕組みについてはほとんど投稿していないため、具体的な回答を提供することはできません。一般的な出発点として、ミニダンプを分析して、BSOD をトリガーする原因の詳細を確認することをお勧めします。ここに良いスタートガイドがあります。

http://forums.majorgeeks.com/showthread.php?p=1418737

于 2011-01-29T17:22:26.823 に答える