【发布时间】:2014-07-24 23:09:20
【问题描述】:
谁能告诉我 Windows 内置任务管理器使用什么 API 来转储我选择的进程?
如果我是对的,那不是 MiniDumpWriteDump。如果不是这个,那又是什么? 非常感谢!
【问题讨论】:
标签: winapi dump taskmanager
谁能告诉我 Windows 内置任务管理器使用什么 API 来转储我选择的进程?
如果我是对的,那不是 MiniDumpWriteDump。如果不是这个,那又是什么? 非常感谢!
【问题讨论】:
标签: winapi dump taskmanager
简短的回答,它使用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:\windows\system32\taskmgr.exe 以查看它使用的功能。您会看到它从 DbgHelp.dll 导入 MiniDumpWriteDump。这也是 DbgHelp.dll 现在随 Windows 一起发布的原因。
【讨论】: