Проверка доступа к частным объектам
Защищенное серверное приложение должно проверка права доступа клиента, прежде чем разрешить клиенту доступ к защищенному частному объекту. Для этого сервер передает маркер олицетворения, дескриптор безопасности и набор запрошенных прав доступа в AccessCheck. Записи управления доступом (ACE) в dacl дескриптора безопасности указывают права доступа, разрешенные или запрещенные различным доверенным лицам. Функция AccessCheck сравнивает доверенного лица в каждом ACE с доверенными лицами, указанными в токене олицетворения. Описание алгоритма, используемого для предоставления или запрета доступа, см. в разделе Управление доступом к объекту DACLs.
Функция AccessCheckAndAuditAlarm выполняет аналогичные проверка доступа. Кроме того, он создает записи аудита в журнале событий безопасности в зависимости от saCL в дескрипторове безопасности.
Функции AccessCheckByType и AccessCheckByTypeAndAuditAlarm похожи на AccessCheck и AccessCheckAndAuditAlarm, за исключением того, что они позволяют проверка доступ к подобъектам объекта, например к наборам свойств или свойствам. Функции AccessCheckByTypeResultList и AccessCheckByTypeResultListAndAuditAlarm также похожи на AccessCheck, за исключением того, что они предоставляют результаты доступа проверка для каждого подобъекта в иерархии свойств и наборов свойств объекта. Эти функции используют структуру OBJECT_TYPE_LIST для описания иерархии объектов, для которых проверяется доступ. Функции, создающие сообщение аудита, используют тип перечисления AUDIT_EVENT_TYPE , чтобы указать, является ли проверяемый объект объектом службы каталогов. Дополнительные сведения об иерархии объекта и его подобъектах см. в разделе ACE для управления доступом к свойствам объекта.
Запрошенные права доступа, передаваемые в функции AccessCheck и AccessCheckAndAuditAlarm , не должны включать универсальные права доступа. Сервер может использовать функцию MapGenericMask для преобразования любых универсальных прав доступа в соответствующие конкретные и стандартные права в соответствии с сопоставлением, указанным в структуре GENERIC_MAPPING .
Функции AreAllAccessesGranted и AreAnyAccessesGranted сравнивают запрошенную маску доступа с предоставленной маской доступа.
Пример кода, в котором используется функция AccessCheck , см. в разделе Проверка клиентского доступа с помощью списков управления доступом на C++.
Функция ConvertToAutoInheritPrivateObjectSecurity создает и возвращает дескриптор безопасности в формате, который позволяет автоматически распространять наследуемые ACE. Этот дескриптор безопасности содержит все ACE, унаследованные и ненаследуемые, в текущем дескрипторе безопасности и имеет самостоятельный формат. Функция ConvertToAutoInheritPrivateObjectSecurity определяет, наследуются ли они или не наследуются, сравнивая все ACE в текущем дескрипторе безопасности со всеми ACE в родительском дескрипторе безопасности. Между двумя группами ACE не может быть соответствия "один к одному". Например, ACE, который разрешает разрешение на чтение и запись, может быть эквивалентен двум ACE: ACE, который разрешает чтение, и ACE, который разрешает разрешение на запись. Родительский дескриптор безопасности может не предоставляться, если текущий дескриптор безопасности является родительским.