Прочитать на английском

Поделиться через


Создание или изменение ACL

Windows поддерживает набор функций, которые создают список управления доступом (ACL) или изменяют записи управления доступом (ACEs) в существующем списке ACL.

Функция SetEntriesInAclсоздает новый ACL. SetEntriesInAcl может указать совершенно новый набор ACEs для ACL или объединить один или несколько новых ACEs с ACEs существующего ACL. Функция SetEntriesInAcl использует массив структур EXPLICIT_ACCESS для указания сведений о новых ACEs. Каждая структура EXPLICIT_ACCESS содержит информацию, описывающую одно ACE. Эти сведения включают права доступа, тип ACE, флаги, управляющие наследованием ACE, а также структуру доверенного лица, идентифицирующую доверенного лица.

Чтобы добавить новый ACE в существующую ACL

  1. Используйте функцию GetSecurityInfo или GetNamedSecurityInfo для получения существующей функции DACL или SACL из дескриптора безопасностиобъекта.
  2. Для каждого нового ACE вызовите функцию BuildExplicitAccessWithName, чтобы заполнить структуру EXPLICIT_ACCESS сведениями, описывающими ACE.
  3. Вызов SetEntriesInAcl, указав существующий ACL и массив структур EXPLICIT_ACCESS для новых ЭЛЭ. Функция SetEntriesInAcl выделяет и инициализирует ACL и её ACEs.
  4. Вызовите функцию SetSecurityInfo или SetNamedSecurityInfo, чтобы подключить новый ACL к дескриптору безопасности объекта.

Если вызывающий объект указывает существующий ACL, SetEntriesInAcl объединяет новую информацию ACE с существующими ACE в ACL. Рассмотрим случай, например, когда существующий ACL предоставляет доступ к указанному доверенному лицу, а структура EXPLICIT_ACCESS запрещает доступ к тому же доверенному лицу. В этом случае SetEntriesInAcl добавляет новый ACE отказа в доступе для доверенного лица и удаляет или изменяет существующий ACE с разрешением доступа для доверенного лица.

Пример кода, объединяющий новый ACE с существующим ACL, смотрите в разделе изменения списков ACL объекта в C++.