有人能告诉我内置的任务管理器用什么API来转储我选择的进程吗?
如果我是对的,那不是MiniDumpWriteDump。如果不是这个,那又怎样? 非常感谢!
答案 0 :(得分:4)
只有一种方法,MiniDumpWriteDump()就是这样。
您可以自己轻松查看,运行dumpbin.exe /imports c:\windows\system32\taskmgr.exe
查看其使用的功能。你会看到它从DbgHelp.dll导入MiniDumpWriteDump。这些天也是DbgHelp.dll附带Windows的原因。
答案 1 :(得分:4)
简短回答,它使用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