Создание дескрипторов безопасности для новых объектов каталога

С помощью ADSI можно создать дескриптор безопасности и задать его как свойство nTSecurityDescriptor нового объекта или использовать его для замены свойства nTSecurityDescriptor существующего объекта.

Чтобы создать дескриптор безопасности для объекта, выполните следующие действия.

  1. Используйте CoCreateInstance для создания COM-объекта ADSI для нового дескриптора безопасности и получения указателя интерфейса IADsSecurityDescriptor на этот объект. Имейте в виду, что идентификатор класса CLSID_SecurityDescriptor.
  2. Используйте метод IADsSecurityDescriptor::p ut_Owner , чтобы задать владельца объекта. Доверенное лицо является пользователем, группой или другим субъектом безопасности. Приложение должно использовать значение из соответствующего свойства от пользователя или объекта группы доверенного лица, к которому применяется ACE.
  3. Используйте метод IADsSecurityDescriptor::p ut_Control , чтобы контролировать, наследуются ли списки управления доступом и списки SACL объекта из родительского контейнера.
  4. Используйте CoCreateInstance , чтобы создать COM-объект ADSI для DACL для нового дескриптора безопасности и получить указатель интерфейса IADsAccessControlList на этот объект. Имейте в виду, что идентификатор класса CLSID_AccessControlList.
  5. Для каждого ACE, добавляемого в DACL, используйте CoCreateInstance , чтобы создать COM-объект ADSI для нового ACE и получить указатель интерфейса IADsAccessControlEntry на этот объект. Имейте в виду, что идентификатор класса CLSID_AccessControlEntry.
  6. Для каждого ACE, добавляемого в DACL, задайте свойства ACE с помощью методов свойств объекта IADsAccessControlEntry ACE. Дополнительные сведения о свойствах, заданных для ACE, см. в разделе "Настройка прав доступа для объекта".
  7. Для каждого ACE, добавляемого в DACL, используйте метод QueryInterface в объекте IADsAccessControlEntry , чтобы получить указатель IDispatch . Метод IADsAccessControlList::AddAce требует указателя интерфейса IDispatch на ACE.
  8. Для каждого ACE, добавляемого в DACL, используйте IADsAccessControlList::AddAce , чтобы добавить новый ACE в DACL. Имейте в виду, что порядок ACL может повлиять на оценку доступа к объекту. Для правильного доступа к объекту может потребоваться создать новый список ACL, добавить ACL из существующего списка ACL в правильном порядке, а затем заменить существующий список ACL в дескрипторе безопасности новым списком ACL. Дополнительные сведения см. в разделе "Порядок ACE" в daCL.
  9. Выполните шаги 4–8, чтобы создать saCL для нового дескриптора безопасности.
  10. Используйте метод IADsSecurityDescriptor::p ut_DiscretionaryAcl , чтобы задать daCL. Дополнительные сведения о списках DACL см. в разделе Null DACLs и пустых списков управления доступом уровня данных.
  11. Используйте метод IADsSecurityDescriptor::p ut_SystemAcl , чтобы задать saCL.
  12. Преобразуйте объект IADsSecurityDescriptor в VARIANT с помощью метода QueryInterface объекта IADsSecurityDescriptor для получения интерфейса IDispatch . Затем задайте для элемента VTvariantзначение VT_DISPATCH и задайте элемент pdispValварианта VARIANT , равный указателю IDispatch .
  13. Получите указатель интерфейса IADs на объект.
  14. Используйте метод IADs::P ut с параметром nTSecurityDescriptor и variant , созданным выше, для записи нового дескриптора безопасности в кэш свойств.
  15. Используйте метод IADs::SetInfo для обновления свойства объекта в каталоге.