【发布时间】:2021-03-25 14:38:30
【问题描述】:
我一直在尝试使用 Windows API 来启动通过匿名管道与父进程通信的子进程。基本思想是使用CreatePipe 在父进程中创建一个或多个管道,然后使用CreateProcess 和STARTUPINFOEX 参数启动具有继承管道句柄的子进程,该参数指定PROC_THREAD_ATTRIBUTE_HANDLE_LIST 属性中的继承句柄.
在我看来,句柄列表的第一个元素用作子进程的标准输入,第二个用作标准输出,第三个用作标准错误。我没有看到任何关于这种行为的文档,我没想到它是因为STARTUPINFO 字段hStdInput、hStdOutput、hStdError(以及dwFlags 中的STARTF_USESTDHANDLES 标志)似乎特别旨在传达CreateProcess 调用者关于标准句柄的意图。从实验上看,PROC_THREAD_ATTRIBUTE_HANDLE_LIST 似乎覆盖了STARTF_USESTDHANDLES,我觉得这更令人惊讶。
那么两个问题:
- 此行为是否记录在我遗漏的某处?
- 如何在继承句柄的同时使用默认行为来确定子进程的标准句柄?
更新:事实证明,我看到的行为特定于我作为子进程启动的应用程序。它一定是在检查继承的句柄并对它们执行特定的命令。大多数 Windows 应用程序的行为并非如此。
【问题讨论】:
-
没有这样的行为。你错了。传递给
PROC_THREAD_ATTRIBUTE_HANDLE_LIST的数组中句柄的顺序没有任何作用 -
@RbMm 感谢您的回复。原来我看到的行为是由于我作为子进程启动的特定应用程序,而不是 Windows API。如果您想提交您的评论作为答案,我会将其标记为正确。