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