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

Функция SetSecurityDescriptorDacl задает сведения в списке управления доступом на уровне пользователей (DACL). Если dacl уже присутствует в дескрипторове безопасности, daCL заменяется.

Синтаксис

BOOL SetSecurityDescriptorDacl(
  [in, out]      PSECURITY_DESCRIPTOR pSecurityDescriptor,
  [in]           BOOL                 bDaclPresent,
  [in, optional] PACL                 pDacl,
  [in]           BOOL                 bDaclDefaulted
);

Параметры

[in, out] pSecurityDescriptor

Указатель на структуру SECURITY_DESCRIPTOR , в которую функция добавляет DACL. Этот дескриптор безопасности должен иметь абсолютный формат, то есть его члены должны быть указателями на другие структуры, а не смещения смежных данных.

[in] bDaclPresent

Флаг, указывающий наличие DACL в дескрипторе безопасности. Если этот параметр имеет значение TRUE, функция устанавливает флаг SE_DACL_PRESENT в структуре SECURITY_DESCRIPTOR_CONTROL и использует значения в параметрах pDacl и bDaclDefaulted . Если этот параметр имеет значение FALSE, функция очищает флаг SE_DACL_PRESENT, а pDacl и bDaclDefaulted игнорируются.

[in, optional] pDacl

Указатель на структуру ACL , задающую daCL для дескриптора безопасности. Если этот параметр имеет значение NULL, то дескриптору безопасности назначается СПИСОК DACL NULL , который разрешает всем доступ к объекту . На DACL ссылается дескриптор безопасности, а не копируется в .

[in] bDaclDefaulted

Флаг, указывающий источник DACL. Если этот флаг имеет значение TRUE, daCL был получен каким-то механизмом по умолчанию. Значение FALSE указывает, что daCL явно указан пользователем. Функция сохраняет это значение в флаге SE_DACL_DEFAULTED структуры SECURITY_DESCRIPTOR_CONTROL . Если этот параметр не указан, флаг SE_DACL_DEFAULTED очищается.

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

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

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

Комментарии

Существует важное различие между пустым и несуществующим DACL. Если DACL пуст, он не содержит записей управления доступом (ACE); таким образом, права доступа явно не предоставляются. В результате доступ к объекту неявно запрещен.

Если объект не имеет DACL (если параметр pDacl имеет значение NULL), ему не назначается защита и предоставляются все запросы на доступ. Чтобы обеспечить безопасность, ограничьте доступ с помощью DACL.

Существует три возможных результата в разных конфигурациях флага bDaclPresent и параметра pDacl :

  • Если параметр pDacl указывает на DACL, а флаг bDaclPresent имеет значение TRUE, то daCL указывается и должен содержать ACE, разрешенные для доступа, чтобы разрешить доступ к объекту.
  • Если параметр pDacl не указывает на DACL, а флаг bDaclPresent имеет значение TRUE, то указывается NULL DACL. Разрешен любой доступ. Не следует использовать СПИСОК DACL NULL с объектом , так как любой пользователь может изменить DACL и владельца дескриптора безопасности. Это будет препятствовать использованию объекта .
  • Если параметр pDacl не указывает на DACL, а флаг bDaclPresent имеет значение FALSE, daCL можно предоставить для объекта с помощью механизма наследования или по умолчанию.

Примеры

Пример использования этой функции см. в разделе Создание дескриптора безопасности для нового объекта.

Требования

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

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

GetSecurityDescriptorDacl

InitializeSecurityDescriptor

IsValidSecurityDescriptor

Низкоуровневые контроль доступа

Низкоуровневые функции контроль доступа

SECURITY_DESCRIPTOR

SECURITY_DESCRIPTOR_CONTROL

SetSecurityDescriptorGroup

SetSecurityDescriptorOwner

SetSecurityDescriptorSacl