根据SDK,有些Win32对象可以“继承”到给定进程创建的子进程。 (事件,互斥体,管道等)
这实际上是什么意思?
假设我有一个命名事件对象,该对象使用CreateEvent
创建,一次使用bInheritHandle == true
创建,另一次使用== false
创建。
现在,我开始一个子进程。这两个事件句柄如何影响子进程?它们在哪些情况下有所不同?
最佳答案
如果您创建/打开一个对象并允许该句柄被继承,则允许继承该句柄的子进程(例如,您可以为CreateProcess指定bInheritHandles = TRUE
)将具有这些句柄的副本。这些继承的句柄将具有与父句柄相同的句柄值。因此,例如:
CreateEvent
返回事件对象的句柄,该句柄是0x1234
。 0x1234
,而不必调用CreateEvent
或OpenEvent
。例如,您可以在子进程的命令行中传递句柄值。 这对未命名的对象很有用-由于未命名对象,其他进程无法打开它们。如果需要,使用句柄继承子进程可以获取未命名对象的句柄。