Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
После того как дескриптор безопасности будет связан с файлом, нужно определить параметры безопасности существующего файла и при необходимости изменить их. Для чтения и задания параметров безопасности файла в дескрипторе безопасности применяются следующие функции:
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.
Контрольные вопросы:
[gl] Лекция 14. Тема: Структурная обработка исключений[:]
Структурная обработка исключительных ситуаций (Structured Exception Handling — SEH) в Win32 представляет собой надежный механизм, позволяющий приложениям отвечать на неожиданные события, такие как исключительные ситуации при адресации, сбои при выполнении арифметических операций и системные ошибки. Кроме того, SEH делает возможным завершение программы из любой точки в блоке кода, а также автоматически выполняет указанные программистом действия и восстановление при ошибках.
SEH гарантирует, что программа сможет освободить ресурсы и выполнить другие действия по очистке до того, как блок, поток или процесс завершится либо в соответствии с программой, либо из-за неожиданного исключения. Кроме того, SEH можно легко добавить к имеющемуся коду, причем это часто упрощает логику программы.
Дата публикования: 2015-11-01; Прочитано: 426 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!