Пример: чтение разрешений на доступ к файлу

Пример: чтение разрешений на доступ к файлу

Программа 15.4 представляет собой функцию ReadFilePermissions, которая используется программами 15.1 и 15.2. Эта программа методично использует описанные выше функции для извлечения нужной информации. Правильная работа этой программы зависит от того факта, что ACL были созданы с помощью программы 15.3. Функция включена в тот же исходный модуль, что и программа 15.3, поэтому соответствующие объявления не повторяются.

Программа 15.4. ReadFilePermissions: чтение атрибутов безопасности 

DWORD ReadFilePermissions(LPCTSTR lpFileName, LPTSTR UsrNm, LPTSTR GrpNm)

/* Возвращает разрешения на доступ к файлу в стиле UNIX. */

{

 PSECURITY_DESCRIPTOR pSD = NULL;

 DWORD LenNeeded, PBits, iAce;

 BOOL DaclF, AclDefF, OwnerDefF, GroupDefF;

 BYTE DAcl[ACL_SIZE];

 PACL pAcl = (PACL)&DAcl;

 ACL_SIZE_INFORMATION ASizeInfo;

 PACCESS_ALLOWED_ACE pAce;

 BYTE AType;

 HANDLE ProcHeap = GetProcessHeap();

 PSID pOwnerSid, pGroupSid;

 TCHAR RefDomain[2][DOM_SIZE];

 DWORD RefDomCnt[] = {DOM_SIZE, DOM_SIZE);

 DWORD AcctSize[] = {ACCT_NAME_SIZE, ACCT_NAME_SIZE};

 SID_NAME_USE sNamUse[] = {SidTypeUser, SidTypeGroup};

 /* Получить требуемый размер дескриптора безопасности. */

 GetFileSecurity(lpFileName, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION, pSD, 0, &LenNeeded);

 pSD = HeapAlloc(ProcHeap, HEAP_GENERATE_EXCEPTIONS, LenNeeded);

 GetFileSecurity(lpFileName, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION, pSD, LenNeeded, &LenNeeded);

 GetSecurityDescriptorDacl(pSD, &DaclF, &pAcl, &AclDefF);

 GetAclInformation(pAcl, &ASizeInfo, sizeof(ACL_SIZE_INFORMATION), AclSizeInformation);

 PBits = 0; /* Вычислить разрешения на доступ на основе ACL. */

 for (iAce = 0; iAce < ASizeInfo.AceCount; iAce++) {

  GetAce(pAcl, iAce, &pAce);

  AType = pAce->Header.AceType;

  if (AType == ACCESS_ALLOWED_ACE_TYPE) PBits |= (0x1 << (8-iAce));

 } 

 /* Определить имя владельца и владеющей группы. */

 GetSecurityDescriptorOwner(pSD, &pOwnerSid, &OwnerDefF);

 GetSecurityDescriptorGroup(pSD, &pGroupSid, &GroupDefF);

 LookupAccountSid(NULL, pOwnerSid, UsrNm, &AcctSize[0], RefDomain[0], &RefDomCnt[0], &sNamUse[0]);

 LookupAccountSid(NULL, pGroupSid, GrpNm, &AcctSize[1], RefDomain[1], &RefDomCnt[1], &sNamUse[1]);

 return PBits;

} 

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

7.4. Путь к файлу

Из книги Самоучитель работы на компьютере автора Колисниченко Денис Николаевич

7.4. Путь к файлу Путь задает «маршрут» к файлу. Предположим, что у нас есть простенькое дерево каталогов: корневой каталог, каталог А, подкаталог Б, в котором находится файл foto.jpg. Путь к этому файлу будет выглядеть так:АБИногда нужно указать полное имя файла. Оно состоит из


Пример: блокировка на чтение при наличии в очереди блокировки на запись

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Пример: блокировка на чтение при наличии в очереди блокировки на запись Первый вопрос, на который мы попытаемся найти ответ, звучит так: если ресурс заблокирован на чтение и какой-то процесс послал запрос на установление блокировки на запись, будет ли при этом разрешена


Пример: имеют ли приоритет запросы на запись перед запросами на чтение?

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Пример: имеют ли приоритет запросы на запись перед запросами на чтение? Следующий вопрос, на который мы попытаемся дать ответ, таков: есть ли приоритет у запросов на блокировку записи перед запросами на блокировку чтения, если все они находятся в очереди? Некоторые


Пример: изменение разрешений на доступ к файлу

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

Пример: изменение разрешений на доступ к файлу Программа 15.5 является последней в нашем собрании функций, предназначенных для работы со средствами защиты файлов. Эта функция, ChangeFilePermissions, заменяет существующий дескриптор безопасности новым, сохраняя идентификаторы SID


2.4.12 Диалог для доступа к файлу

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

2.4.12 Диалог для доступа к файлу Рассмотрим последний диалог с пользователем. В этом примере используется компьютер с дисковой операционной системой (Disk Operating System — DOS), подключенный к сети TCP/IP. Мы переключимся на устройство d: локального хоста и просмотрим содержимое


10.1.4. Прямой доступ к файлу

Из книги Windows Vista. Для профессионалов автора Клименко Роман Александрович

10.1.4. Прямой доступ к файлу Для чтения из файла в произвольном порядке, а не последовательно, можно воспользоваться методом seek, который класс File наследует от IO. Проще всего перейти на байт в указанной позиции. Номер позиции отсчитывается от начала файла, причем самый первый


10.1.9. Манипулирование правами владения и разрешениями на доступ к файлу

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

10.1.9. Манипулирование правами владения и разрешениями на доступ к файлу Вопрос о владении файлами и разрешениях сильно зависит от платформы. Как правило, в системе UNIX функций больше, чем предоставляет Ruby, а на других платформах многие возможности не реализованы.Для


11.1.1. Права доступа к файлу

Из книги Linux программирование в примерах автора Роббинс Арнольд

11.1.1. Права доступа к файлу Каждый из этих трех разрядов доступа представляет права для разных классов пользователей. Первый разряд — это права владельца файла, второй — права пользователей, входящих в группу, к которой относится файл, а последний разряд представляет


7.1. Настройка разрешений и аудит доступа

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

7.1. Настройка разрешений и аудит доступа По сравнению с предыдущими версиями операционных систем семейства Windows, настройка разрешений на доступ к файлам и ветвям реестра в Windows Vista совершенно не изменилась: окна операционной системы и механизмы изменения остались те же,


Пример 11-6. Чтение командой read из файла через перенаправление

Из книги Операционная система UNIX автора Робачевский Андрей М.

Пример 11-6. Чтение командой read из файла через перенаправление #!/bin/bashread var1 <data-fileecho "var1 = $var1"# Первая строка из "data-file" целиком записывается в переменную var1read var2 var3 <data-fileecho "var2 = $var2 var3 = $var3"# Обратите внимание!# Поведение команды "read" далеко от ожидаемого!# 1) Произошел возврат


5.3.3. Совместный доступ к файлу

Из книги автора

5.3.3. Совместный доступ к файлу Процессы могут взаимодействовать друг с другом через области отображаемой памяти, связанные с одним и тем же файлом. Если в функции mmap() указать флаг MAP_SHARED, все данные, заносимые в отображаемую память, будут немедленно записываться в файл, т.е.


Б.1.5. Перемещение по файлу

Из книги автора

Б.1.5. Перемещение по файлу В файловом дескрипторе запоминается текущая позиция в файле. При чтении или записи данных указатель текущей позиции перемещается на то количество байтов, которое было прочитано или записано. Но иногда нужно осуществлять простое перемещение по


Блокирование доступа к файлу

Из книги автора

Блокирование доступа к файлу Традиционно архитектура файловой подсистемы UNIX разрешает нескольким процессам одновременный доступ к файлу для чтения и записи. Хотя операции записи и чтения, осуществляемые с помощью системных вызовов read(2) или write(2), являются атомарными, в