MiniDumpWriteDump (dbghelp)
Last changed: tmo793-180.150.94.207

.
Summary
Writes user-mode minidump information to the specified file.

C# Signature:

[DllImport("Dbghelp.dll")]
static extern bool MiniDumpWriteDump(IntPtr hProcess, uint ProcessId, IntPtr hFile, int DumpType, ref MINIDUMP_EXCEPTION_INFORMATION ExceptionParam, IntPtr UserStreamParam, IntPtr CallbackParam);

VB Signature:

Declare Function MiniDumpWriteDump Lib "Dbghelp.dll" (TODO) As TODO

User-Defined Types:

MINIDUMP_EXCEPTION_INFORMATION

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

Minidump Types:

    internal enum MINIDUMP_TYPE
    {
        MiniDumpNormal = 0x00000000,
        MiniDumpWithDataSegs = 0x00000001,
        MiniDumpWithFullMemory = 0x00000002,
        MiniDumpWithHandleData = 0x00000004,
        MiniDumpFilterMemory = 0x00000008,
        MiniDumpScanMemory = 0x00000010,
        MiniDumpWithUnloadedModules = 0x00000020,
        MiniDumpWithIndirectlyReferencedMemory = 0x00000040,
        MiniDumpFilterModulePaths = 0x00000080,
        MiniDumpWithProcessThreadData = 0x00000100,
        MiniDumpWithPrivateReadWriteMemory = 0x00000200,
        MiniDumpWithoutOptionalData = 0x00000400,
        MiniDumpWithFullMemoryInfo = 0x00000800,
        MiniDumpWithThreadInfo = 0x00001000,
        MiniDumpWithCodeSegs = 0x00002000
    }

Please add some!

Sample Code:

[DllImport("Dbghelp.dll")]
static extern bool MiniDumpWriteDump(IntPtr hProcess, uint ProcessId, IntPtr hFile, int DumpType, ref MINIDUMP_EXCEPTION_INFORMATION ExceptionParam,IntPtr UserStreamParam, IntPtr CallbackParam);
[DllImport("kernel32.dll")]
static extern IntPtr GetCurrentProcess();

[DllImport("kernel32.dll")]
static extern uint GetCurrentProcessId();

[DllImport("kernel32.dll")]
static extern uint GetCurrentThreadId();

[StructLayout(LayoutKind.Sequential, Pack = 4)]
public struct MINIDUMP_EXCEPTION_INFORMATION
{
    public uint ThreadId;
    public IntPtr ExceptionPointers;
    public int ClientPointers;
}

/// <summary>
/// Call back function that will be called when an exception has occured. This function will create
/// a fullmemory dump of the application
/// </summary>
  /// <param name="sender"></param>
/// <param name="e"></param>
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    string assemblyPath = Assembly.GetEntryAssembly().Location;
    string dumpFileName = assemblyPath + "_" + DateTime.Now.ToString("dd.MM.yyyy.HH.mm.ss") + ".dmp";
    FileStream file = new FileStream(dumpFileName, FileMode.Create);
    MINIDUMP_EXCEPTION_INFORMATION info = new MINIDUMP_EXCEPTION_INFORMATION();
    info.ClientPointers = 1;
    info.ExceptionPointers = Marshal.GetExceptionPointers();
    info.ThreadId = GetCurrentThreadId();
    // A full memory dump is necessary in the case of a managed application, other wise no information
    // regarding the managed code will be available
    MiniDumpWriteDump( GetCurrentProcess(), GetCurrentProcessId(), file.SafeFileHandle.DangerousGetHandle(), MiniDumpWithFullMemory, ref info, IntPtr.Zero, IntPtr.Zero );
    file.Close();
    string exeName = Path.GetFileName(assemblyPath);
    MessageBox.Show( "An Unhanled exception has been detected in the application " + exeName + " .\r\nException information is saved in " + dumpFileName,
            "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}

private static readonly int MiniDumpWithFullMemory = 2;

Documentation