Существуют некоторые объекты Win32, которые согласно SDK могут быть "наследованы" к дочерним процессам, созданным данным процессом. (События, взаимные исключения, каналы...)
Что это на самом деле означает?
Скажем, у меня есть именованный объект-событие, созданный с CreateEvent
, одно время с bInheritHandle == true
, и другое время == false
.
Теперь я запускаю дочерний процесс. Как те два дескриптора события влияют на дочерний процесс? По которым сценариям они отличаются?
Если вы создаете / откроете объект и позволяете, чтобы он был унаследован, дочерние процессы, которые разрешены наследовать ручки (например, вы можете указать Binherithandles = True
для createProcess) будет иметь копии этих ручков. Эти унаследованные ручки будут иметь одинаковые значения ручки, что и родительские ручки. Таким образом, например:
CreateeeEvent
Возвращает ручку на объект события, ручка - это 0x1234
. 0x1234
без необходимости звонить CreateEwent
или OpenEvent
. Например, вы можете пройти значение ручки в командной строке дочернего процесса. Это полезно для неназванных объектов - поскольку они безымянные, другие процессы не могут открыть их. Использование ручки наследования дочерних процессов может получить ручки для неназванных объектов, если вы хотите их.
Если вы создадите событие и позволите хэндлу унаследовать от дочерних процессов, то дочерний процесс может использовать хэндл к тому же самому объекту, что и родительский. Это может быть использовано таким образом, что дочерний процесс использует хэндл события для подачи сигнала родителю, когда задача выполнена (существует много других способов использования наследуемых объектов хэндлов событий).
EDIT: Удаленная дезинформация.