特定のプロセス内で MiniDumpWriteDump を実行すると、正常なダンプ ファイルが提供されます。
hProcess と processId が前述の特定のプロセスを指す外部プロセスから MiniDumpWriteDump を実行すると、長さゼロのダンプ ファイルが提供されます。
#2 と同じように、たとえば FireFox を指すだけで、正常なダンプ ファイルが提供されます
ダンプしようとしている特定のプロセスは、私が知る限り低い特権で実行されており、外部プロセスは管理者の CMD ウィンドウから実行されています。
[DllImport("dbghelp.dll",
EntryPoint = "MiniDumpWriteDump",
CallingConvention = CallingConvention.Winapi,
CharSet = CharSet.Unicode,
ExactSpelling = true,
SetLastError = true)]
private static extern bool MiniDumpWriteDump(IntPtr hProcess,
uint processId,
SafeHandle hFile,
uint dumpType,
IntPtr expParam,
IntPtr userStreamParam,
IntPtr callbackParam);
ノート:
- ファイルストリームを正しくフラッシュ、クローズ、破棄しています
- MiniDumpWriteDump は false を返し、GetLastWin32Error は次を返します: -2147024597
- 上記の特定のプロセス (ドット ネット サーバー プロジェクト) には、FireFox と同じセキュリティ オプションがあります (たとえば、ダンプは Notepad++ プロセスで機能します)。