gpt4 book ai didi

c++ - 如何将程序的句柄赋予它创建的进程?

转载 作者:行者123 更新时间:2023-11-27 23:44:00 31 4
gpt4 key购买 nike

我有两个程序,ParentKid

我希望 Kid 在 Parent 使用 CreateProcess 创建 Kid 后获得 Parent 的句柄。传输此句柄的最简单方法似乎是将句柄放在 CreateProcess 的命令行参数中,但我无法看到在 Parent 中获取父句柄。 GetCurrentProcess 返回一个奇怪的非值,并且 DuplicateHandle 在没有 Kid 的句柄的情况下无法工作(不可能,因为我需要创建 Kid 来获取它的句柄,但是 CreateProcess 也是将 Parent 的句柄发送给 Kid 的唯一机会。

有什么方法可以让 Kid 轻松地处理 Parents 的问题?

最佳答案

The easiest way to transmit this handle seems to be by putting the Handle in the commandline arguments of CreateProcess

这是一种方式,但不是唯一方式。

另一种简单的方法是让 Parent 将其进程 ID 从 GetCurrentProcessId() 发送到 Kid,然后是 Kid 可以使用 OpenProcess() 获取 Parent 的句柄。

there is no way I can see to get the Parent's Handle inside Parent.

GetCurrentProcess(),返回表示调用进程的伪句柄。当在调用进程的上下文中使用时,所有接受进程句柄的 API 都将接受此伪句柄。

但是,为了将调用进程的句柄传递给另一个进程,Parent 必须使用 DuplicateHandle() 将伪句柄转换为真实句柄 (将 Parent 设置为源进程和目标进程)。这是记录在案的行为。

GetCurrentProcess returns a weird non-value, and DuplicateHandle doesn't work without having the Kid's Handle

ParentGetProcessHandle() 中的伪句柄复制为真实句柄后,它可以将该拷贝传递给 Kid命令行。只要确保拷贝是可继承的,然后在 CreateProcess() 调用中使用 bInheritHandles=TRUE,或者将 STARTUPINFOEX 传递给 包含 PROC_THREAD_ATTRIBUTE_HANDLE_LIST 的 CreateProcess()(参见 Programmatically controlling which handles are inherited by new processes in Win32)。

Impossible, since I need to create the Kid to get a Handle to it

如果您不想使用可继承的句柄,那么 Parent 可以选择创建 Kid 而无需在命令行上传递任何句柄,然后复制 GetCurrentProcess () 伪句柄,以 Kid 作为目标进程,然后使用您选择的 IPC 机制在它已经运行后将拷贝发送给 Kid

but CreateProcess is also the only chance to send the Parent's Handle to the Kid

不,这不是唯一的方式。 IPC 是另一种方式。

关于c++ - 如何将程序的句柄赋予它创建的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52213546/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com