Обеспечение безопасности в Windows
Задание 1. Определить идентификатор защиты SID текущего пользователя.
Указания к выполнению.
1. Узнать SID текущего пользователя можно несколькими способами.
Способ 1. При помощи утилиты Process Explorer.
Запустите в виртуальной машине утилиту Process Explorer. Сделайте двойной щелчок на процессе explorer.exe (или любом другом процессе, запущенном текущим пользователем). Когда откроется окно свойств процесса, перейдите на вкладку Security:
На рисунке вверху красным цветом выделен SID пользователя – владельца процесса. В данном случае, процесс запущен пользователем с именем Administrator, который является администратором системы, о чем говорит, во первых, RID = 500 (последнее число в SID, см. статью базы знаний Microsoft "Хорошо известные идентификаторы безопасности в операционных системах Windows"1http://support.microsoft.com/kb/243330/ru), во вторых, то, что пользователь входит в группу администраторов (BUILTIN\Administrators).
Способ 2. При помощи утилиты PsGetSid.
Утилита PsGetSid специально предназначена для получения SID разных учетных записей. Данная утилита входит в набор PsTools и её можно скачать с сайта Sysinternals.
Запустите утилиту PsGetSid на виртуальной машине в командной строке. В качестве параметра утилиты можно указать либо имя учетной записи, либо SID. На рисунке ниже продемонстрированы оба варианта:
Удостоверьтесь, что SID полностью совпадают в первом и втором способах.
Задание 2. Определить тип файловой системы.
Указания к выполнению.
1. Следующие задания в данной лабораторной работе основываются на предположении, что системный раздел (логический диск) на виртуальной машине отформатирован с использованием файловой системы NTFS. Проверить, так ли это, можно следующим образом. Дважды щелкните на ярлыке My Computer – щелкните правой кнопкой на локальном диске C – выберите пункт Properties. На рисунке ниже обведен тип файловой системы логического диска:
Задание 3. Создать программу, которая открывает и читает файл.
Указания к выполнению.
1. Создайте пустой проект с названием, например, ReadFile, в Visual Studio и добавьте файл исходного кода main.cpp (см. лабораторную работу 2 "Процессы и потоки", задание 3).
Сохраните проект в папку c:\Programs\ReadFile.
2. Вставьте в main.cpp следующий исходный код (модифицированный пример из MSDN):
#include <windows.h> #include <tchar.h> #include <stdio.h> #define BUFFERSIZE 81 void __cdecl _tmain(int argc, TCHAR *argv[]) { HANDLE hFile; // Дескриптор файла DWORD dwBytesRead = 0; // Количество прочитанных байт char ReadBuffer[BUFFERSIZE] = {0}; // Буфер для чтения char FileName[] = "input.txt"; // Имя файла // Точка останова //__asm int 3 hFile = CreateFile(FileName, // Имя файла для открытия GENERIC_READ, // Открываем для чтения FILE_SHARE_READ, // Файл можно открывать другим процессам NULL, // Атрибуты безопасности по умолчанию OPEN_EXISTING, // Открытие существующего файла FILE_ATTRIBUTE_NORMAL, // Атрибуты файла - обычные NULL); // Без шаблона if (hFile == INVALID_HANDLE_VALUE) { _tprintf("Terminal failure: unable to open file \"%s\" for read\n", FileName); system("pause"); return; } // Читаем на один символ меньше, чем помещается в буфер, // чтобы сохранить место под завершающий нулевой символ if( ReadFile(hFile, ReadBuffer, BUFFERSIZE-1, &dwBytesRead, NULL) == FALSE) { printf("Terminal failure: Unable to read from file\n"); CloseHandle(hFile); system("pause"); return; } if (dwBytesRead > 0 && dwBytesRead <= BUFFERSIZE-1) { ReadBuffer[dwBytesRead]='\0'; // символ с кодом "0" _tprintf("Data read from %s (%d bytes): \n\n", FileName, dwBytesRead); printf("%s\n\n", ReadBuffer); } else if (dwBytesRead == 0) { _tprintf(TEXT("No data read from file %s\n"), FileName); } else { printf("\n ** Unexpected value for dwBytesRead ** \n"); } CloseHandle(hFile); system("pause"); }
Приведенная программа открывает файл input.txt при помощи функции CreateFile, пытается прочитать из него строку символов при помощи функции ReadFile (не более 80 символов) и выводит её на экран.
3. Создайте текстовый файл input.txt в папке проекта, в которой расположен файл main.cpp (например, c:\Programs\ReadFile\ReadFile).
Наберите в нем какой нибудь текст латиницей и сохраните файл.
4. Установите свойства проекта (см. лабораторную работу 2 "Процессы и потоки", задание 3):
- конфигурацию Release;
- Библиотека времени выполнения – Многопоточная (/MT).
5. Проверьте работоспособность созданного приложения (клавиша F5):