Может ли кто-нибудь сказать мне, какой API использует встроенный диспетчер задач Windows для дампа процесса, который я выбираю?
Если я прав, это не MiniDumpWriteDump. Если не это, то что? Большое спасибо!
Может ли кто-нибудь сказать мне, какой API использует встроенный диспетчер задач Windows для дампа процесса, который я выбираю?
Если я прав, это не MiniDumpWriteDump. Если не это, то что? Большое спасибо!
Короткий ответ, он использует MiniDumpWriteDump
.
Детали (некоторые ненужные детали были опущены):
В версии для Windows 7 есть некоторая функция-оболочка в исполняемом файле диспетчера задач, которая вызывается вместе с идентификатором процесса и именем исполняемого файла, например foo.exe
, всякий раз, когда вы хотите сбросить процесс.
Он получает дескриптор процесса, используя OpenProcess
, и сохраняет его в некоторой структуре, выделенной в куче, используя HeapAlloc
.
Он получает временный каталог в некоторой локальной переменной, используя GetTempPathW
, добавляет имя исполняемого файла, например, foo.exe
, используя PathAppendW
, и удаляет расширение, используя PathRemoveExtension
, чтобы оно стало foo
без .exe
, а затем добавляет новое расширение, используя PathAddExtensionW
, и вызывает PathYetAnotherMakeUniqueName
, чтобы проверить, путь не используется или создать новый путь, например foo(2).DMP
. Наконец, он получает дескриптор файла, используя CreateFile
.
Он дублирует дескриптор с помощью DuplicateHandle
и сохраняет его в этой структуре, создает новый поток и передает структуру в качестве аргумента функции потока.
Поток вызывает, используя аргумент MiniDumpWriteDump
с DumpType
установленным в 0x1826
:
MiniDumpWithFullMemory | MiniDumpWithHandleData | MiniDumpWithUnloadedModules | MiniDumpWithFullMemoryInfo | MiniDumpWithThreadInfo
Есть только один способ: MiniDumpWriteDump().
Вы можете легко убедиться в этом сами, запустив dumpbin.exe /imports c:\windows\system32\taskmgr.exe
, чтобы увидеть, какие функции он использует. Вы увидите, что он импортирует MiniDumpWriteDump из DbgHelp.dll. Также причина, по которой DbgHelp.dll поставляется с Windows в наши дни.