C#.NETを使用して完全なメモリダンプを取得するにはどうすればよいですか?
2 に答える
これを行う唯一の安全な方法は、ブルースクリーンを発生させ、Windows 自体にダンプを取得させることです。ブルースクリーンの原因はカーネル関数を介して発生しKeBugCheckEx
、カスタムビルドのデバイス ドライバーをプログラムで呼び出す必要があります。または、CrashOnCtrlScroll
レジストリのトリックを使用して、自分でトリガーすることもできます。
または、2 台のコンピューターを使用してカーネル デバッガーをシステムに接続し、.crash
デバッガー コマンドを使用してメモリ ダンプをトリガーすることもできます。
SysInternals の LiveKD など、同じコンピューターで部分的なカーネル検査を行う方法がありますが、メモリは継続的に変更されるため、「正確」ではありません。これらの方法を使用して健全なダンプを取得することは不可能です。
これらすべてを C# で行うのは無意味です。
MiniDumpWriteDump を使用すると、DumpType を MiniDumpWithFullMemory として指定することで、完全なプロセス ダンプを取得できます。
プロセス ハンドルのリストを取得し、それを MiniDumpWriteDump で反復処理することにより、システム内のすべてのプロセスについてこれを取得しようとする場合があります。セキュリティ関連の問題が発生するかどうかはわかりません。
ユーザー モード プロセスからカーネル メモリ ダンプを取得することに関しては、私の知る限り、これは不可能です。