예제 #1
0
 static extern bool MiniDumpWriteDump(
     IntPtr hProcess,
     Int32 ProcessId,
     IntPtr hFile,
     DumpConstants.MINIDUMP_TYPE DumpType,
     IntPtr ExceptionParam,
     IntPtr UserStreamParam,
     IntPtr CallackParam
     );
예제 #2
0
 public static bool WriteDump(IntPtr hProcess,
                              Int32 ProcessId,
                              IntPtr hFile,
                              DumpConstants.MINIDUMP_TYPE DumpType,
                              IntPtr ExceptionParam,
                              IntPtr UserStreamParam,
                              IntPtr CallackParam
                              )
 {
     return(MiniDumpWriteDump(hProcess, ProcessId, hFile, DumpType, ExceptionParam, UserStreamParam, CallackParam));
 }
예제 #3
0
        private static void ProcessTheParameters(int processId, string dumpFolder, bool isFull)
        {
            Process p = Process.GetProcessById(processId);

            DumpFolder = dumpFolder;
            string     dumpFile = Path.Combine(dumpFolder, DateTime.Now.ToString(DumpConstants.DATETYPEDefault) + ".dump");
            FileStream fs       = new FileStream(dumpFile, FileMode.Create, FileAccess.Write);

            DumpConstants.MINIDUMP_TYPE dumpType   = isFull ? DumpConstants.MINIDUMP_TYPE.MiniDumpWithFullMemory : DumpConstants.MINIDUMP_TYPE.MiniDumpNormal;
            DumpConstants.SYSTEM_INFO   systemInfo = new DumpConstants.SYSTEM_INFO();
            kernel32.GetSystemInfo(ref systemInfo);
            CreateMiniDump(p, fs, systemInfo.wProcessorArchitecture == 9, dumpType);
        }
예제 #4
0
        private static void CreateMiniDump(Process process, FileStream fs, bool is64bit, DumpConstants.MINIDUMP_TYPE dumpType)
        {
            bool retCode = false;

            if (is64bit)
            {
                retCode = DbgHelp_x64.WriteDump(process.Handle, process.Id,
                                                fs.SafeFileHandle.DangerousGetHandle(),
                                                dumpType,
                                                IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
            }
            else
            {
                retCode = DbgHelp_x86.WriteDump(process.Handle, process.Id,
                                                fs.SafeFileHandle.DangerousGetHandle(),
                                                dumpType,
                                                IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
            }

            if (!retCode)
            {
                GetSystemInfo();
                return;
            }
            else
            {
            }
        }