private static void MiniDumpToFile(string fileToDump, MinidumpTypes dumpType) { using var fsToDump = File.Open(fileToDump, FileMode.Create, FileAccess.ReadWrite, FileShare.Write); using var thisProcess = Process.GetCurrentProcess(); var mINIDUMP_EXCEPTION_INFORMATION = new MINIDUMP_EXCEPTION_INFORMATION { ClientPointers = false, #if WITH_EXCEPTIONPOINTERS ExceptionPointers = Marshal.GetExceptionPointers(), #else ExceptionPointers = IntPtr.Zero, #endif ThreadId = SafeNativeMethods.GetCurrentThreadId(), }; var error = SafeNativeMethods.MiniDumpWriteDump( thisProcess.Handle, thisProcess.Id, fsToDump.SafeFileHandle, dumpType, ref mINIDUMP_EXCEPTION_INFORMATION, IntPtr.Zero, IntPtr.Zero); if (error > 0) { DumpMessage?.Invoke(typeof(MiniDump), new MessageEventArgs($"Mini-dumping failed with Code: {error}", "Error!", ErrorLevel.Error)); } }
private static extern bool MiniDumpWriteDump_internal(IntPtr hProcess, int ProcessId, SafeHandle hFile, MinidumpTypes DumpType, ref MINIDUMP_EXCEPTION_INFORMATION ExceptionParam, IntPtr UserStreamParam, IntPtr CallackParam);
internal static int MiniDumpWriteDump(IntPtr hProcess, int ProcessId, SafeHandle hFile, MinidumpTypes DumpType, ref MINIDUMP_EXCEPTION_INFORMATION ExceptionParam, IntPtr UserStreamParam, IntPtr CallackParam) { _ = MiniDumpWriteDump_internal(hProcess, ProcessId, hFile, DumpType, ref ExceptionParam, UserStreamParam, CallackParam); return(Marshal.GetLastWin32Error()); }