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

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

Чтобы создать дескриптор безопасности для объекта:

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