任务管理器使用什么API来转储进程?



有没有人能告诉我windows内置任务管理器使用什么API来转储我选择的进程?

如果我是对的,它不是MiniDumpWriteDump。如果不是这样,那又会怎样?非常感谢!

简而言之,它使用MiniDumpWriteDump

细节(跳过一些不必要的细节):

在Windows 7版本中,当你想转储一个进程时,任务管理器中的一些包装函数可执行文件会随着进程ID和可执行文件名称一起被调用,例如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:windowssystem32taskmgr.exe查看它使用的函数。您将看到它从DbgHelp.dll中导入MiniDumpWriteDump。这也是为什么DbgHelp.dll现在随Windows一起发布的原因。

最新更新