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