如何在不枚举进程的情况下,通过c++从进程id中获取进程名

How to get Process name from process id in windows through C++ without enumerating process?

本文关键字:进程 c++ id 进程名 获取 通过 枚举进程 情况下      更新时间:2023-10-16

我需要从windows中的进程id中获取进程名称,以查找与已记录事件相关的进程名称。它只能从记录的事件中获取执行进程id。进程句柄是使用GetProcessImageFileName()方法所需的输入。无法从记录的事件中获取进程句柄。

在重复的问题中,它谈论当前正在运行的进程。但是我不需要当前正在运行的进程,因为它谈论记录的事件。,我对processID vs processName组合是否在Windows中是唯一的有疑问。所以也要考虑一下……

我期望一定有一些结构将进程id映射到进程名。有这样的结构吗?或者有其他方法从进程id获取进程映像名称吗?

我需要从windows中的进程id中获取进程名,以查找与日志事件相关的进程名。

如果您从日志中获取进程ID,则只有在原始进程仍在运行时才有效。否则,该ID对该进程名不再有效。如果进程在您读取日志之前已经退出,那么所有的赌注都将被取消。

我不需要当前正在运行的进程,因为它谈论记录的事件。

如果原始进程名没有被记录,那么你就不走运了。

我对processID vs processName组合是否在Windows中是唯一的有疑问。

进程ID仅在用于运行中的进程时是唯一的。一旦进程结束,它的进程ID就不再有效,可以在后续的新进程中重用。

我期望一定有一些结构将进程id映射到进程名。

可以,但只适用于正在运行的进程。可以将进程号传递给OpenProcess()。如果成功,它将返回一个HANDLE给正在运行的进程。然后,您可以将HANDLE传递给GetModuleFileName(), GetProcessImageFileName()QueryFullProcessImageName(),这取决于操作系统版本和您能够从OpenProcess()获得的权限。