任务管理器使用啥 API 来转储进程
Posted
技术标签:
【中文标题】任务管理器使用啥 API 来转储进程【英文标题】:What API does Task Manager use to Dump a process任务管理器使用什么 API 来转储进程 【发布时间】:2014-07-24 23:09:20 【问题描述】:谁能告诉我 Windows 内置任务管理器使用什么 API 来转储我选择的进程?
如果我是对的,那不是 MiniDumpWriteDump。如果不是这个,那又是什么? 非常感谢!
【问题讨论】:
【参考方案1】:简短的回答,它使用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
【讨论】:
【参考方案2】:只有一种方法,MiniDumpWriteDump() 就是方法。
您可以自己轻松地看到这一点,运行dumpbin.exe /imports c:\windows\system32\taskmgr.exe
以查看它使用的功能。您会看到它从 DbgHelp.dll 导入 MiniDumpWriteDump。这也是 DbgHelp.dll 现在随 Windows 一起发布的原因。
【讨论】:
以上是关于任务管理器使用啥 API 来转储进程的主要内容,如果未能解决你的问题,请参考以下文章
process explorer 如何生成转储(dmp)文件