从进程句柄获取进程信息

3

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

我正在使用C++(11),Visual Studio 2012,在Windows上运行。非常感谢您的帮助。


如果您已经拥有进程的_handle_和_id_,为什么还需要它呢? - K-ballo
你实际上需要什么信息?根据你自己的说法,函数返回的信息已经有50%了。唯一缺少的是初始线程的ID和句柄。你为什么需要它? - Nik Bougalis
我需要检查启动应用程序的进程是否仍在运行,启动应用程序的应用程序(我们称之为application1)在启动应用程序(我们称之为application2)时传递其进程ID,然后application2从进程ID中派生出句柄。但是我不知道如何从那里获取PROCESS_INFORMATION - Ryan
你打算如何使用 PROCESS_INFORMATION 来确定应用程序是否仍在运行? - Raymond Chen
3个回答

6

PROCESS_INFORMATIONCreateProcess()填充。这个过程已经启动,无法改变。

让我们集中精力做你真正想做的事情。首先使用OpenProcess()获得一个句柄以获取该进程。您已经拥有PID。然后,WaitForSingleObject()将告诉您它是否终止。将第二个参数传递为INFINITE以阻塞直到该进程终止。如果您想轮询,则将其传递为0。最后,使用CloseHandle()进行清理。


1

PROCESS_INFORMMATION 提供了 4 个信息:

HANDLE hProcess
HANDLE hThread
DWORD dwProcessID
DWORD dwThreadID

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接