MiniDumpWriteDump (C#) создает файлы дампа нулевой длины для определенного процесса

  1. Выполнение MiniDumpWriteDump в конкретном процессе обеспечивает работоспособный файл дампа.

  2. Выполнение MiniDumpWriteDump из внешнего процесса, где hProcess и processId указывают на упомянутый конкретный процесс, предоставляет файл дампа нулевой длины

  3. То же самое, что #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++).

1 ответ

Решение

Хорошо.. нашел решение для этого..

Проект внешнего процесса был построен для платформы AnyCPU (и, поскольку он не выполняет только 64-битные команды, он был запущен для 32-битных). Установка его в x64 позволила сбросить еще один 64-битный процесс.

И я рекомендую всем, кто сталкивается с этой проблемой, создавать отдельные проекты, один для 32-битных и один для 64-битных.

Другие вопросы по тегам