Книга: Системное программирование в среде Windows
Работа с ACL
Работа с ACL
В этом разделе показано, как работать со списками ACL, связывать ACL с дескриптором безопасности и добавлять ACL. Взаимосвязь между этими объектами и соответствующими функциями представлена на рис. 15.1.
Сначала необходимо инициализировать структуру ACL. Поскольку непосредственный доступ к ACL осуществляться не должен, его внутреннее строение для нас безразлично. Однако программа должна предоставить буфер, выступающий в роли ACL; обработка содержимого выполняется соответствующими функциями.
BOOL InitializeAcl(PACL pAcl, DWORD cbAcl, DWORD dwAclRevision)
pAcl — адрес предоставляемого программистом буфера размером cbAcl байт. В ходе последующего обсуждения и в программе 15.4 будет показано, как определить размер ACL, но для большинства целей размера 1 Кбайт будет вполне достаточно. Значение параметра dwAclRevision следует устанавливать равным ACL_REVISION.
Далее мы должны добавить АСЕ в желаемом порядке, используя функции AddAccessAllowedAce и AddAccessDeniedAce.
BOOL AddAccessAllowedAce(PACL pAcl, DWORD dwAclRevision DWORD dwAccessMask, PSID pSid)
BOOL AddAccessDeniedAce(PACL pAcl, DWORD dwAclRevision, DWORD dwAccessMask, PSID pSid)
Параметр pAcl указывает на ту же структуру ACL, которая была инициализирована функцией InitializeACL, а параметр dwAclRevision также следует устанавливать равным ACL_REVISION. Параметр pSid указывает на SID, например на тот, который был получен с помощью функции LookupAccountName.
Права, которые предоставляются или в которых отказывается пользователю или группе, идентифицируемым данным SID, определяются маской доступа (dwAccessMask).
Последнее, что потребуется сделать — это связать ACL с дескриптором безопасности. В случае разграничительного ACL для этого используется функция SetSecurityDescriptorDacl.
BOOL SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR pSecurityDescriptor, BOOL bDaclPresent, PACL pAcl, BOOL fDaclDefaulted)
Значение параметра bDaclPresent, равное TRUE, указывает на то, что в структуре pAcl имеется ACL. Если этот параметр равен FALSE, то следующие два параметра, pAcl и fDaclDefaulted, игнорируются. Флаг SE_DACL_PRESENT структуры SECURITY_DESCRIPTOR_CONTROL также устанавливается равным значению этого параметра.
Значение FALSE параметра fDaclDefaulted указывает на то, что ACL был сгенерирован программистом. В противном случае ACL был получен с использованием механизма, принятого по умолчанию, например, путем наследования; вместе с тем, для указания того, что имеется ACL, значение параметра должно быть равным TRUE. Флаг SE_DACL_PRESENT структуры SECURITY_DESCRIPTOR_CONTROL также устанавливается равным значению этого параметра.
Доступны и другие функции, предназначенные для удаления и считывания АСЕ из ACL; они обсуждаются далее в этой главе. А теперь настало время обратиться к примеру.
- Атрибуты безопасности
- Общий обзор средств безопасности: дескриптор безопасности
- Управляющие флаги дескриптора безопасности
- Идентификаторы безопасности
- Работа с ACL
- Пример: использование разрешений на доступ в стиле UNIX к файлам NTFS
- Пример: инициализация атрибутов защиты
- Чтение и изменение дескрипторов безопасности
- Пример: чтение разрешений на доступ к файлу
- Пример: изменение разрешений на доступ к файлу
- Защита объектов ядра и коммуникаций
- Пример: защита процесса и его потоков
- Обзор дополнительных возможностей защиты объектов
- Резюме
- Упражнения
- Использование отдельных процессоров XSLT
- 9.5.5. Борьба с баннерами и всплывающими окнами
- Применение XSLT с сервлетами Java
- Библиотека Oracle XDK
- Уровень второй: программы среднего уровня
- Слой хранения (СУБД)
- Глава 10 Работа с API процессоров XSLT
- 10.4.5. Интерфейс с Oracle
- Практическая работа 53. Запуск Access. Работа с объектами базы данных
- Лекция 15. Работа с базами данных
- Работа с ресурсами локальной сети
- Эффективная работа с временными файлами сортировки