Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Чтение и изменение дескрипторов безопасности



После того как дескриптор безопасности будет связан с файлом, нужно определить параметры безопасности существующего файла и при необходимости изменить их. Для чтения и задания параметров безопасности файла в дескрипторе безопасности при­меняются следующие функции:

BOOL GetFileSecurity (LPCTSTR lpszFileName,

SECURITY_INFORMATION secInfo,

PSECURITY__DESCRIPTOR psd, DWORD cbSd,

LPDWORD lpcbLengthNeeded)

BOOL SetFileSecurity (LPCTSTR lpszFileName,

SECURITY__INFORMATION secInfo,

PSECURITY_DESCRIPTOR psd)

Параметры

secInfo — константа перечислимого типа, принимающая такие значения, какOWNER_SECURITY_INFORMATION, GROUP_SECURITY_INFORMATION, DACL_SECURITY_INFORMATION и SACL_SECURITY_INFORMATION

Этот параметр указывает, какую часть описателя безопасности следует получить или установить. Значения могут объединяться при помощи поразрядного "или".

Лучший способ выяснить размер буфера возврата для GetFileSecurity— вызвать эту функцию дважды. При первом вызове в параметре cbSd просто укажите 0. После выделения буфера вызовите функцию второй раз.

Само собой разумеется, что для выполнения этих операций нужны соответствую­щие разрешения на файл. Например, для успешного выполнения SetFileSecurity необходимо иметь разрешение WRITE_DAC или быть владельцем объекта.

Функции GetSecurityDescriptorOwner и GetSecurityDescriptorGroup могут извлекать идентификаторы SID из дескрипторов безопасности, полученных функцией GetFileSecurity. Для получения АСL служит следующая функция:

BOOL GetSecurityDescriptorDacl (PSECURITY_DESCRIPTOR psd,

LPBOOL fDaclPresent, PACL *pAcl, LPBOOL lpfDaclDefaulted)

Ее параметры почти идентичны параметрам SetSecurityDescriptorDacl, с той лишь разницей, что флаги не устанавливаются, а возвращаются, указывая, имеется ли данный АСL и был ли он установлен по умолчанию или пользователем.

Чтобы расшифровать АСL, надо узнать, сколько элементов АСЕ он содержит.

BOOL GetAclInformation (PACL pAcl, LPVOID pAclInformation, DWORD cbAclInfo, ACL_INFORMATION_CLASS dwAclInfoClass)

В большинстве случаев класс информации АСL dwAclInfoClass принимает значение AclSizeInformation, а параметр AclInformation — это структура типа ACL_SIZE_INFORMATION. Еще одним значением класса может быть Acl- RevisionInformation.

Структура ACL_SIZE_INFORMATION содержит три элемента: наиболее важный из них, AceCount, показывает, сколько элементов содержится в списке. Чтобы опреде­лить, достаточно ли велик АСL, посмотрите значения элементов AclBytesInUse и AclBytesFree этой структуры.

BOOL GetAce (PACL pAcl, DWORD dwAceIndex, LPVOID *pAce)

Эта функция позволяет получить элементы АСЕ (их общее количество уже извест­но) по индексу. Параметр рАсе указывает на структуру АСЕ, в которой есть элемент Header, содержащий, в свою очередь, элемент АсеТуре. Тип элемента можно прове­рить на значения ACCESS_ALLOWED_ACE_TYPE и ACCESS_DENIED_ACE_TYPE. [kgl].

Основная литература: [1] – 112 - 131 c.

Контрольные вопросы:

  1. Какую информацию включают атрибуты безопасности?
  2. Какие элементы включает дескриптор безопасности?
  3. Назначение списков контроля доступа.

[gl] Лекция 14. Тема: Структурная обработка исключений[:]

Структурная обработка исключительных ситуаций (Structured Exception Handling — SEH) в Win32 представляет собой надежный механизм, позволяющий приложениям отвечать на неожиданные события, такие как исключительные ситуации при адреса­ции, сбои при выполнении арифметических операций и системные ошибки. Кроме того, SEH делает возможным завершение программы из любой точки в блоке кода, а также автоматически выполняет указанные программистом действия и восстановле­ние при ошибках.

SEH гарантирует, что программа сможет освободить ресурсы и выполнить другие действия по очистке до того, как блок, поток или процесс завершится либо в соответ­ствии с программой, либо из-за неожиданного исключения. Кроме того, SEH можно легко добавить к имеющемуся коду, причем это часто упрощает логику программы.





Дата публикования: 2015-11-01; Прочитано: 426 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...