Функция ConvertToAutoInheritPrivateObjectSecurity (securitybaseapi.h)

Функция ConvertToAutoInheritPrivateObjectSecurity преобразует дескриптор безопасности и его списки управления доступом (ACL) в формат, поддерживающий автоматическое распространение наследуемых записей управления доступом (ACE).

Синтаксис

BOOL ConvertToAutoInheritPrivateObjectSecurity(
  [in, optional] PSECURITY_DESCRIPTOR ParentDescriptor,
  [in]           PSECURITY_DESCRIPTOR CurrentSecurityDescriptor,
  [out]          PSECURITY_DESCRIPTOR *NewSecurityDescriptor,
  [in, optional] GUID                 *ObjectType,
  [in]           BOOLEAN              IsDirectoryObject,
  [in]           PGENERIC_MAPPING     GenericMapping
);

Параметры

[in, optional] ParentDescriptor

Указатель на дескриптор безопасности для родительского контейнера объекта . Если родительского контейнера нет, этот параметр имеет значение NULL.

[in] CurrentSecurityDescriptor

Указатель на текущий дескриптор безопасности объекта .

[out] NewSecurityDescriptor

Указатель на переменную, получающую указатель на только что выделенный самостоятельный дескриптор безопасности. Вызывающий объект отвечает за вызов функции DestroyPrivateObjectSecurity , чтобы освободить этот дескриптор безопасности.

[in, optional] ObjectType

Указатель на структуру GUID , определяющую тип объекта, связанного с параметром CurrentSecurityDescriptor . Если у объекта нет GUID, этот параметр должен иметь значение NULL.

[in] IsDirectoryObject

Если задано значение TRUE, новый объект является контейнером и может содержать другие объекты. Если значение FALSE, новый объект не является контейнером.

[in] GenericMapping

Указатель на структуру GENERIC_MAPPING , указывающую сопоставление каждого универсального права с определенными правами для объекта.

Возвращаемое значение

Если функция выполнена успешно, функция возвращает ненулевое значение.

Если функция завершается сбоем, она возвращает ноль. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Функция ConvertToAutoInheritPrivateObjectSecurity пытается определить, наследуются ли ACE в списке управления доступом на уровне пользователей (DACL) и списке управления доступом системы (SACL) текущего дескриптора безопасности от родительского дескриптора безопасности. Функция передает параметр ParentDescriptor в функцию CreatePrivateObjectSecurityEx , чтобы получить списки управления доступом, которые содержат только унаследованные ACE. Затем он сравнивает эти ACE с ACE в исходном дескрипторе безопасности, чтобы определить, какие из исходных ACE были унаследованы. ACE не обязательно должны соответствовать одному. Например, ACE, разрешающий доступ на чтение и запись доверенному лицу, может быть эквивалентен двум ACE: ACE, который разрешает доступ на чтение, и ACE, который разрешает доступ на запись.

Все ACE в исходном дескрипторе безопасности, эквивалентные ACE, унаследованным от родительского дескриптора безопасности, помечаются флагом INHERITED_ACE и добавляются в новый дескриптор безопасности. Все остальные ACE в исходном дескрипторе безопасности добавляются в новый дескриптор безопасности в виде ненаследуемых ACE.

Если исходный DACL не имеет унаследованных ACE, функция устанавливает флаг SE_DACL_PROTECTED в битах элемента управления нового дескриптора безопасности. Аналогичным образом, флаг SE_SACL_PROTECTED устанавливается, если ни один из ACE в списке управления доступом не наследуется.

Для списков DACLs, которые наследуют ACE, функция переупорядочения ACE на две группы. Первая группа содержит ACE, которые были непосредственно применены к объекту . Вторая группа наследовала ACE. Такое упорядочение гарантирует, что ненаследуемые ACE имеют приоритет над наследуемыми ACE. Дополнительные сведения см. в разделе Порядок ACE в DACL.

Функция задает флаги SE_DACL_AUTO_INHERITED и SE_SACL_AUTO_INHERITED в битах элементов управления нового дескриптора безопасности.

Функция не изменяет упорядочение ACE, разрешенных для доступа, относительно ACE, запрещенных в доступе, в DACL, поскольку это приведет к изменению семантики результирующего дескриптора безопасности. Если функция не может преобразовать DACL без изменения семантики, она оставляет DACL без изменений и устанавливает флаг SE_DACL_PROTECTED.

Новый дескриптор безопасности имеет того же владельца и основную группу, что и исходный дескриптор безопасности.

Новый дескриптор безопасности эквивалентен исходному дескриптору безопасности, поэтому вызывающему объекту не требуются права доступа или привилегии для обновления дескриптора безопасности до нового формата.

Эта функция работает с списками управления доступом ACL_REVISION и ACL_REVISION_DS.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header securitybaseapi.h (включая Windows.h)
Библиотека Advapi32.lib
DLL Advapi32.dll

См. также раздел

Контроль доступа клиента или сервера

Функции контроль доступа клиента и сервера

CreatePrivateObjectSecurityEx

DestroyPrivateObjectSecurity

GENERIC_MAPPING

GUID