2014-07-08 45 views
1

我打开了一个使用CreateProcess(在这种情况下是calc.exe)的进程。如何在Visual C++中获取进程的句柄?

我传递的参数给CreateProcess:

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

我希望能够杀死进程,在这个进程中打开线程,等等。我知道来电这样做,但他们需要手柄,我没有。

有没有办法自动打开一个处理子进程时产卵或其他?

我在想着e'inherit句柄在CreateProcess中的参数,但看起来不太正确。

+0

** MSDN **是这样的RTFM问题的goto位置,而不是** StackOverflow **。 – CodeAngry

回答

3

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

CreateProcess成功返回时,该结构将填充您需要的HANDLE。具体而言,将包含以下内容:

hProcess

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

hThread

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

dwProcessId

可用于识别过程的值。从创建进程开始直到进程 的所有句柄关闭并释放进程对象时,此值均有效 ;此时, 标识符可能会被重新使用。

dwThreadId

可被用于识别一个线程的值。该值从创建线程的时间 开始有效,直到线程的所有句柄都关闭并且释放线程对象为 ;此时,标识符 可以被重新使用。

由于MSDN says

把手在PROCESS_INFORMATION必须CloseHandle的 时,他们不再需要被关闭。

+1

啊!非常感谢你。所以 .hProcess将包含我需要的一切。 谢谢! 我没有足够的分数来'注释'你的评论:(我会在〜5分钟内将它标记为正确的谢谢 – user3816764

+0

Sweet!刚刚使用了CreateRemoteThread,感谢一个朋友 – user3816764

+1

+1对于很好的格式和耐心回答这样一个明显的问题,而不是像我一样粗鲁。 – CodeAngry