Джонсон Харт - Системное программирование в среде Windows

Тут можно читать онлайн Джонсон Харт - Системное программирование в среде Windows - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Издательский дом Вильямс, год 2005. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Системное программирование в среде Windows
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом Вильямс
  • Год:
    2005
  • Город:
    Москва • Санкт-Петербург • Киев
  • ISBN:
    5-8459-0879-5
  • Рейтинг:
    4.22/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

Системное программирование в среде Windows - описание и краткое содержание, автор Джонсон Харт, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Эта книга посвящена вопросам разработки приложений с использованием интерфейса прикладного программирования операционных систем компании Microsoft (Windows 9х, Windows XP, Windows 2000 и Windows Server 2003). Основное внимание уделяется базовым системным службам, включая управление файловой системой, процессами и потоками, взаимодействие между процессами, сетевое программирование и синхронизацию. Рассматривается методика переноса приложений, написанных в среде Win32, в среду Win64. Подробно описываются все аспекты системы безопасности Windows и ее практического применения. Изобилие реальных примеров, доступных также и на Web-сайте книги, существенно упрощает усвоение материала.

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

Системное программирование в среде Windows - читать онлайн бесплатно полную версию (весь текст целиком)

Системное программирование в среде Windows - читать книгу онлайн бесплатно, автор Джонсон Харт
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Указанные две команды представлены программами 15.1 и 15.2. В программах 15.3, 15.4 и 15.5 реализованы три вспомогательные функции.

1. InitializeUnixSA, которая создает действительную структуру атрибутов безопасности, соответствующих набору разрешений доступа UNIX. Эта функция обладает достаточной общностью, чтобы ее можно было применять по отношению к таким объектам, отличным от файлов, как процессы (глава 6), именованные каналы (глава 11) и объекты синхронизации (глава 8).

2. ReadFilePermissions.

3. ChangeFilePermissions.

Примечание

Приведенные ниже программы являются упрощенными вариантами программ, представленных на Web-сайте книги. В полных вариантах программ используются отдельные массивы AllowedAceMasks и DeniedAceMasks, в то время как в листингах ниже задействован только один массив.

Использование отдельного массива DeniedAceMasks обеспечивает невозможность запрета прав доступа SYNCHRONIZE, поскольку флаг SYNCHRONIZE устанавливается во всех трех макросах FILE_GENERIC_READ, FILE_GENERIC_WRITE и FILE_GENERIC_EXECUTE, которые являются комбинациями нескольких флагов (см. заголовочный файл WINNT.H). Дополнительные разъяснения предоставляются в полном варианте программы, доступном на Web-сайте. Кроме того, в полном варианте программы проверяется, не указано ли в командной строке групповое имя; ниже мы будем везде предполагать, что указывается имя пользователя.

Программа 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.

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

static BOOL ProcessItem(LPWIN32_FIND_DATA pFileData, DWORD NumFlags, LPBOOL Flags)

/* Вывести список атрибутов с указанием разрешений доступа и владельца. */

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

{

DWORD FType = FileType(pFileData), Mode, i;

BOOL Long = Flags[1];

TCHAR GrpNam[ACCT_NAME_SIZE], UsrNam[ACCT_NAME_SIZE];

SYSTEMTIME LastWrite;

TCHAR PermString[] = _T("---------");

const TCHAR RWX[] = {'r','w','x'}, FileTypeChar[] = {' ', 'd'};

if (FType != TYPE_FILE && FType != TYPE_DIR) return FALSE;

_tprintf(_T("\n"));

if (Long) {

Mode = ReadFilePermissions(pFileData->cFileName, UsrNam, GrpNam);

if (Mode == 0xFFFFFFFF) Mode = 0;

for (i = 0; i < 9; i++) {

if (Mode >> (8 – i) & 0x1) PermString[i] = RWX[i % 3];

}

_tprintf(_T("%c%s 18.7s %8.7s%10d"), FileTypeChar[FType – 1], PermString, UsrNam, GrpNam, pFileData->nFileSizeLow);

FileTimeToSystemTime(&(pFileData->ftLastWriteTime), &LastWrite);

_tprintf(_T(" %02d/%02d/%04d %02d:%02d:%02d"), LastWrite.wMonth, LastWrite.wDay, LastWrite.wYear, LastWrite.wHour, LastWrite.wMinute, LastWrite.wSecond);

}

_tprintf(_T(" %s"), pFileData->cFileName);

return TRUE;

}

Далее мы рассмотрим реализацию вспомогательных функций.

Пример: инициализация атрибутов защиты

Программа 15.3 представляет вспомогательную функцию InitializeUnixSA. Эта функция создает структуру атрибутов безопасности, которая содержит ACL с элементами АСЕ, эмулирующими разрешения на доступ к файлам в UNIX. Существует девять АСЕ, предоставляющих или запрещающих доступ по чтению, записи или запуску файлов на выполнение владельцу (owner), группе (group) и прочим пользователям (everyone). Эта структура не является локальной переменной функции и должна распределяться и инициализироваться, а затем возвращаться вызывающей программе; обратите внимание на массив AceMasks в программе 15.1.

Программа 15.3. InitUnFp: инициализация атрибутов защиты

/* Задание режима доступа в стиле UNIX посредством элементов АСЕ, хранящихся в структуре SECURITY_ATTRIBUTES. */

#include "EvryThng.h"

#define ACL_SIZE 1024

#define INIT_EXCEPTION 0x3

#define CHANGE_EXCEPTION 0x4

#define SID_SIZE LUSIZE

#define DOM_SIZE LUSIZE

LPSECURITY_ATTRIBUTES InitializeUnixSA(DWORD UnixPerms, LPCTSTR UsrNam, LPCTSTR GrpNam, LPDWORD AceMasks, LPHANDLE pHeap) {

HANDLE SAHeap = HeapCreate(HEAP_GENERATE_EXCEPTIONS, 0, 0);

LPSECURITY_ATTRIBUTES pSA = NULL;

PSECURITY_DESCRIPTOR pSD = NULL;

PACL pAcl = NULL;

BOOL Success;

DWORD iBit, iSid, UsrCnt = ACCT_NAME_SIZE;

/* Таблицы имен пользователя (User), группы (Group) и прочих пользователей (Everyone), идентификаторов SID и так далее для LookupAccountName и создания SID. */

LPCTSTR pGrpNms[3] = {EMPTY, EMPTY, _T("Everyone")};

PSID pSidTable[3] = {NULL, NULL, NULL};

SID_NAME_USE sNamUse[3] = {SidTypeUser, SidTypeGroup, SidTypeWellKnownGroup};

TCHAR RefDomain[3][DOM_SIZE];

DWORD RefDomCnt[3] = {DOM_SIZE, DOM_SIZE, DOM_SIZE};

DWORD SidCnt[3] = {SID_SIZE, SID_SIZE, SID_SIZE};

__try { /* Блок try-except для исключений при распределении памяти. */

*рНеар = SAHeap;

pSA = HeapAlloc(SAHeap, 0, sizeof (SECURITY_ATTRIBUTES));

pSA->nLength = sizeof(SECURITY_ATTRIBUTES);

pSA->bInheritHandle = FALSE;

/* Программист может выполнить эти установки позже. */

pSD = HeapAlloc(SAHeap, 0, sizeof(SECURITY_DESCRIPTOR));

pSA->lpSecurityDescriptor = pSD;

InitializeSecurityDescriptor(pSD, SECURITY DESCRIPTOR REVISION);

/* Получить SID пользователя, группы и прочих пользователей.

* Другие важные подробности можно найти на Web-сайте. */

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Джонсон Харт читать все книги автора по порядку

Джонсон Харт - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Системное программирование в среде Windows отзывы


Отзывы читателей о книге Системное программирование в среде Windows, автор: Джонсон Харт. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x