如何在Visual C ++中获取进程的句柄?

时间:2014-07-08 14:21:15

标签: visual-c++

我使用CreateProcess(在这种情况下为calc.exe)打开了一个进程。

我将参数传递给createProcess:

L"<path to calc>",
NULL,
NULL,
NULL,
false,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&<startupInfo struct memset to 0>
&<procInfo struct memset to 0>

我希望能够杀死进程,在该进程中打开线程等等。我知道这样做的调用,但它们需要句柄,我没有。

是否有办法在生成子进程时自动打开子进程的句柄或其他内容?

我在想CreateIrocess中处理'参数',但这看起来不太合适。

1 个答案:

答案 0 :(得分:3)

您传递给CreateProcess的最后一个参数是指向PROCESS_INFORMATION结构的指针(即procInfo变量)。

CreateProcess成功返回后,该结构将填入您需要的HANDLE。具体来说,它将包含以下内容:

  

<强> hProcess

     

新创建进程的句柄。句柄用于指定   在对进程执行操作的所有函数中的进程   对象

     

<强> hThread

     

新创建进程的主线程的句柄。该   handle用于指定执行的所有函数中的线程   对线程对象的操作。

     

<强> dwProcessId

     

可用于标识流程的值。该值有效   从创建流程到流程的所有句柄   关闭,过程对象被释放;在这一点上,   标识符可以重复使用。

     

<强> dwThreadId

     

可用于标识线程的值。该值有效   创建线程的时间,直到线程的所有句柄都是   关闭并释放线程对象;此时,标识符   可以重复使用。

作为MSDN says

  

必须使用 CloseHandle 关闭 PROCESS_INFORMATION 中的句柄   当它们不再需要时。