自分のアプリケーション用に Windows Filtering Platform MSNMNTR サンプルにコードをいくつか追加しましたが、構造は同じままです。Win8 64 ビット用のドライバーとアプリケーションをコンパイルし、ドライバーに製品署名を付けました。コードをビルドした (仮想) マシンでは、サンプルは正常に動作し、正しく監視されます。inf、sys、および exe を別のマシンにコピーすると、サンプルは監視しません。traceview の出力から、2 番目のマシンでは DriverEntry() が呼び出されていないことがわかります。そのため、フロー制御が設定されていません。2 台のマシンは Win8 のリリース バージョンを実行しています。ドライバーはマシン #1 で正常に動作するため、新しいコードの問題ではないようです。また、マシン #2 で署名の強制をオフにしても、署名の問題ではないようです。問題。コードのリリース バージョンとデバッグ バージョンの両方に同じ問題があります。コードをセットアップして実行するために使用する手順は次のとおりです。この動作を引き起こす可能性のあるものは何ですか?
- ドライバー .pdbs を traceview のフォルダーにコピーします。
- .inf を右クリックし、[インストール] を選択します。
- 昇格したコマンド プロンプトから「net start msnmntr」を実行します。
- 管理者として traceview を起動します。
- 管理者特権でのコマンド プロンプトから "monitor monitor "C:\Program Files\Internet Explorer\iexplore.exe"" を実行します。
PS私はまだこれにwindbgを入れていませんが、試したらすぐに結果で質問を更新します.
編集して追加: OK、両方のマシンでカーネルモード デバッガーを実行したところ、動作に違いが見られました。まず、両方のマシンで DriverEntry が呼び出されます。私はそれについて間違っていました。ただし、コードが機能する (つまり、Web トラフィックを監視する) マシンでは、monitor.exe が実行されると DriverEntry が呼び出され (上記の手順 5)、コードが機能しないマシンでは、「net start msnmntr」(上記の手順 3) が実行されます。