gpt4 book ai didi

winapi - DuplicateHandle 的 DUPLICATE_CLOSE_HANDLE 标志有什么意义?

转载 作者:行者123 更新时间:2023-12-04 18:18:18 24 4
gpt4 key购买 nike

我试图找出我继承的一些 Win32 管道代码中的问题。这是old standbyCreatePipe() x2 后跟 DuplicateHandle() x2 和 CreateProcess() .

    if (!CreatePipe(&child_stdout_read, &parent_write, &security, 0) ||
!DuplicateHandle(GetCurrentProcess(), parent_write,
GetCurrentProcess(), &child_stdout_write, 0, TRUE,
DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE)) {
throw std::system_error(GetLastError(), std::system_category());
}

让我感到困惑的是旗帜 DUPLICATE_CLOSE_SOURCE用于 DuplicateHandle()来电。根据 Microsoft 文档,这意味着源句柄将在复制后关闭。

将句柄(到管道)的副本复制到同一进程中,然后关闭原始句柄究竟有什么意义?为什么不直接使用原版?

最佳答案

好吧,在我看来, key 在 TRUE 中。范围。那是BOOL bInheritHandle ,所以这段代码所做的是复制句柄以使其可继承。

通常,这可以通过设置 security.bInheritHandle 轻松完成。至TRUE创建句柄时。但在这种情况下,这将使两个句柄都可以继承。而且很明显,原作者只想继承child_stdout_write .

请注意,使用较少人为的代码可以实现相同的效果:

SetHandleInformation(handle, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT);

关于winapi - DuplicateHandle 的 DUPLICATE_CLOSE_HANDLE 标志有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11268687/

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