Операционные системы. Программирование в операционной среде Windows
32 Процесс, прежде чем оперировать с ОЯ, должен запрашивать разрешение на доступ к нему. Такие меры повышают устойчивость ОС к сбоям. Три механизма совместного использования ОЯ'. - наследование описателя ОЯ; - именование ОЯ; - дублирование описателей ОЯ. 3.4.1. Наследование описателя объекта Наследование применимо, когда процессы связаны отношениями процесс-родитель - процесс-потомок. Допустим родительскому процессу доступен один или несколько описателей ОЯ, и он может, породив дочерний процесс, передать ему по наследству доступ к своим ОЯ. При создании ОЯ процесс должен сообш,ить системе, что ему нужен наследуемый описатель данного объекта (описатели ОЯ наследуются, но сами ОЯ — нет). Чтобы создать наследуемый описатель, родительский процесс инициализирует структуру SECURITY ATTRIBUTES, а затем передает ее адрес Create-функции. Функция создания ОЯ в этом случае возвращает наследуемый описатель. Следуюш,ий код создает объект-мьютекс и возвраш,ает его описатель, как наследуемый: SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(sa); sa . IpSecurityDescriptor = NULL; sa.binheritHandle =TRUE; // делаем описатель наследуемым HANDLE hMutex = CreateMutex(&sa, FALSE, NULL); При создании дочернего процесса функцией CreateProcessA необходимо установить флаг наследования в параметре blnheritHandles = TRUE, тогда все наследуемые описатели из таблицы описателей ОЯ родительского процесса будут скопированы в таблицу описателей дочернего процесса, т.е. унаследованы. Счетчик ОЯ при этом увеличивается. Наследуются только описатели объектов, суш,ествуюш,ие на момент создания процесса-потомка. Значение наследуемого описателя ОЯ можно передать процессу- потомку как аргумент командной строки или через переменную окружения. Родительский процесс добавляет в свой блок переменных окружения новую переменную, содержащую значение наследуемого описателя ОЯ. Процесс-потомок наследует переменные окружения родительского процесса и, вызвав функцию GetEnvironmentVariableA, получает нужный описатель. 3.4.2. Именованные объекты Второй способ, позволяющий нескольким процессам совместно использовать одни и те же ОЯ, связан с именованием этих объектов. Именование допускают следуюпще функции создания ОЯ:
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy