从进程句柄获取进程信息

Getting Process Information from Process Handle

本文关键字:信息 取进程 获取 进程句柄      更新时间:2023-10-16

我需要在我的应用程序中使用外部进程的PROCESS_INFORMATION,我有进程句柄和进程ID,但我不知道如何从中获得PROCESS_INFORMATION

我使用c++ (11), Visual Studio 2012,在Windows上运行。

PROCESS_INFORMATIONCreateProcess()填充。船已启航;进程已启动

让我们关注你真正想做的事情。要了解进程是否已经终止,首先使用OpenProcess()获取该进程的句柄。你需要PID,你已经有了。然后WaitForSingleObject()将告诉您它是否被终止。为第二个参数传递INFINITE以阻塞直到进程终止。如果你想投票,通过0。最后,使用CloseHandle()进行清理。

PROCESS_INFORMMATION提供4条信息:

HANDLE hProcess
HANDLE hThread
DWORD dwProcessID
DWORD dwThreadID

你说你已经有了其中的两个值——进程句柄和进程ID。那只剩下线程句柄和线程ID。它们属于为进程创建的第一个线程。您可以使用CreateToolhelp32Snapshot()Thread32First()Thread32Next()枚举正在运行的线程,查找属于给定进程ID的线程ID,然后使用OpenThread()获取给定线程ID的线程句柄。棘手的部分是确定哪个线程ID是第一个线程。这些信息在CreateProcess()之外是不容易获得的。

您需要的信息可以通过CreateToolhelp32Snapshot函数获得,因为它同时返回进程ID和父进程ID。