на главную | войти | регистрация | DMCA | контакты | справка | donate |      

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


моя полка | жанры | рекомендуем | рейтинг книг | рейтинг авторов | впечатления | новое | форум | сборники | читалки | авторам | добавить



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

/* Глава 15. Команда chmodW. */

/* chmodW [опции] режим файл [ИмяГруппы].

   Изменение режима доступа к именованному файлу.

   Опции:

    -f Принудительный режим — не выводить предупреждающие сообщения в случае невозможности изменения режима.

    –с Создать файл, если он не существует. Необязательное имя группы указывается после имени файла. */

/* Требуются NTFS и Windows NT (под управлением Windows 9x программа работать не будет). */


#include "EvryThng.h" 


int _tmain(int argc, LPTSTR argv[]) {

 HANDLE hFile, hSecHeap;

 BOOL Force, CreateNew, Change, Exists;

 DWORD Mode, DecMode, UsrCnt = ACCT_NAME_SIZE;

 TCHAR UsrNam[ACCT_NAME_SIZE];

 int FileIndex, GrpIndex, ModeIndex;

 /* Массив прав доступа к файлу, следующих в том порядке, который принят в UNIX. */

 /* Эти права будут различными для объектов различного типа. */

 /*ПРИМЕЧАНИЕ: в полном варианте программы, находящемся на Web-сайте, */

 /*используются отдельные массивы масок разрешения и запрещения доступа.*/

 DWORD AceMasks[] = {

  FILE_GENERIC_READ, FILE_GENERIC_WRITE, FILE_GENERIC_EXECUTE

 };

 LPSECURITY_ATTRIBUTES pSa = NULL;

 ModeIndex = Options(argc, argv, _T("fc"), &Force, &CreateNew, NULL);

 GrpIndex = ModeIndex + 2;

 FileIndex = ModeIndex + 1;

 DecMode = _ttoi(argv[ModeIndex]);

 /* Режим защиты представляет собой восьмеричное число. */

 Mode = ((DecMode / 100) % 10) * 64 /*Преобразовать в десятичное число.*/

      + ((DecMode / 10) % 10) * 8 + (DecMode % 10);

 Exists = (_taccess(argv[FileIndex], 0) == 0);

 if (!Exists && CreateNew) {

  /* Файл не существует; создать новый файл. */

  GetUserName(UsrNam, &UsrCnt);

  pSa = InitializeUnixSA(Mode, UsrNam, argv[GrpIndex], AceMasks, &hSecHeap);

  hFile = CreateFile(argv[FileIndex], 0, 0, pSa, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

  CloseHandle(hFile);

  HeapDestroy(hSecHeap); /* Освободить память, занимаемую структурами безопасности. */

 }

 else if (Exists) { /* Файл существует; изменить разрешения доступа. */

  Change = ChangeFilePermissions(Mode, argv[FileIndex], AceMasks);

 }

 return 0;

} 

В программе 15.2 представлена соответствующая часть команды lsFP, а именно, функция Process Item. 


Пример: использование разрешений на доступ в стиле UNIX к файлам NTFS | Системное программирование в среде Windows | Программа 15.2. lsFP: перечисление разрешений на доступ к файлу