如何在没有枚举进程的情况下通过C ++从进程ID中获取进程名称?

时间:2015-08-07 19:04:19

标签: c++ windows winapi process operating-system

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

duplicate question中,它讨论了当前正在运行的流程。但我现在不需要运行进程,因为它讨论了记录事件。 &安培;我怀疑在Windows中processID与processName组合是否唯一。所以需要考虑一下..

我希望必须有一些结构来将进程ID映射到进程名称。有这样的结构吗?或从流程ID获取流程图像名称的任何其他方法?

1 个答案:

答案 0 :(得分:3)

  

我需要从Windows中的进程ID获取进程名称,以查找与已记录事件关联的进程名称。

如果您从日志中获取进程ID,则只有在原始进程仍在运行时才会生效。否则,该ID不再对该进程名称有效。如果在您阅读日志之前该过程已经退出,则所有投注均已关闭。

  

我现在不需要运行流程,因为它讨论了记录事件。

如果没有记录原始进程名称,那么你运气不好。

  

我怀疑processID与processName组合在Windows中是否唯一。

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

  

我希望必须有一些结构来将进程ID映射到进程名称。

是的,但仅适用于正在运行的流程。您可以将进程ID传递给OpenProcess()。如果成功,它将向正在运行的进程返回HANDLE。然后,您可以将HANDLE传递给GetModuleFileName()GetProcessImageFileName()QueryFullProcessImageName(),具体取决于您可以从OpenProcess()获得的操作系统版本和权限。