Winapi 我是否必须关闭子进程稍后拥有的继承句柄?

Winapi 我是否必须关闭子进程稍后拥有的继承句柄?,winapi,handle,interprocess,child-process,Winapi,Handle,Interprocess,Child Process,微软在这里稳操胜券。他们在文章中说: 此进程终止时,剩余的打开句柄将被清除。 为了避免大型应用程序中的资源泄漏,请显式关闭句柄 这是完全无用的。什么手柄?在哪个过程中 我想好好想想 当在父进程中使用SECURITY\u ATTRIBUTES.bInheritHandle=TRUE创建句柄时,子进程可以查看和使用它,并且句柄在两个进程中具有相同的值和访问权限 但它是同一个句柄,还是恰好具有相同数字表示形式的副本? 如果我将hRead句柄传递给子进程,以便它可以从管道中读取,并且子进程关闭句柄,我

微软在这里稳操胜券。他们在文章中说:

此进程终止时,剩余的打开句柄将被清除。
为了避免大型应用程序中的资源泄漏,请显式关闭句柄

这是完全无用的。什么手柄?在哪个过程中


我想好好想想

当在父进程中使用
SECURITY\u ATTRIBUTES.bInheritHandle=TRUE
创建句柄时,子进程可以查看和使用它,并且句柄在两个进程中具有相同的值和访问权限

但它是同一个句柄,还是恰好具有相同数字表示形式的副本?

如果我将
hRead
句柄传递给子进程,以便它可以从管道中读取,并且子进程关闭句柄,我是否还需要从父进程中关闭它?它不会从子进程下擦除管道吗


我的实验表明,
CloseHandle
在子线程关闭后尝试关闭传递给它的
hRead
句柄时返回成功。这有力地证明了是的,你应该关闭它。不过,我希望你能给我一个更可靠的建议。

你在这里一针见血。Win32句柄充当对底层内核模式对象的用户模式引用。新对象和现有对象的句柄(引用)通常是通过某种CreateXXX调用创建的-通过调用-{或将句柄标记为可继承并创建新进程(将句柄从当前进程复制到子进程中),以确保句柄值相同。}

此时,有(至少)两个对内核对象的引用,这两个引用都需要关闭,以解锁对象并释放任何消耗的资源。

Ah。因此,在生成子进程时克隆句柄。这就是我所追求的。