Winapi WTSEnumerateProcess vs CreateToolhelp32Snapshot

Winapi WTSEnumerateProcess vs CreateToolhelp32Snapshot,winapi,process,enumerate,Winapi,Process,Enumerate,我想枚举32或64(本地)计算机上所有正在运行的进程。我应该更好地使用什么:wtsenumerateprocesss还是CreateToolhelp32Snapshot?我想说CreateToolhelp32Snapshot,它适用于除NT4外的任何windows版本。在WinXP上,WTSEnumerateProcesss仅在终端服务器服务运行时工作(当它运行时,WTSEnumerateProcesss将向您提供有关以非管理员身份运行时不应拥有的进程的信息,此漏洞已在Vista中关闭) 但是这

我想枚举32或64(本地)计算机上所有正在运行的进程。我应该更好地使用什么:wtsenumerateprocesss还是CreateToolhelp32Snapshot?

我想说CreateToolhelp32Snapshot,它适用于除NT4外的任何windows版本。在WinXP上,WTSEnumerateProcesss仅在终端服务器服务运行时工作(当它运行时,WTSEnumerateProcesss将向您提供有关以非管理员身份运行时不应拥有的进程的信息,此漏洞已在Vista中关闭)

但是这两个函数并没有提供相同的信息,所以这取决于你在追求什么,它们都只是称之为半文档化


无论哪种方式,获取进程的完整路径都是有问题的(GetModuleFileNameEx对于WOW64失败,GetProcessImageFileName返回内核路径并有重命名问题,QueryFullProcessImageName是Vista+,据说在路径问题中有空格)

如果要枚举所有进程,则不应使用WTSEnumerateProcess()。这只枚举由您传递其句柄的特定终端服务器拥有的进程。@Hans Passant:我相信该参数是针对远程服务器的,而不是针对本地机器上的每个TS会话eQueryFullProcessImageName()在路径问题中有空间?你能详细说明一下吗?@raymai97不是6年后的事了,但它确实作为2008年的服务器问题出现在评论中