- •Введение
- •1. Лабораторная работа № 1
- •1.1. Цель работы
- •1.2. Теоретическое введение
- •1.2.1. Получение информации об операционной системе
- •1.2.2. Получение информации из реестра
- •1.2.3. Получение информации о системных каталогах Windows
- •1.2.4. Получение информации о диске
- •1.3. Создание приложения для получения характеристик компьютера и операционной системы
- •Контрольные вопросы
- •2. Лабораторная работа №2
- •2.1.Цель работы
- •2.2. Теоретическое введение
- •2.2.1. Процедуры и функции для работы с виртуальной памятью
- •2.3. Создание приложения, работающего с виртуальной памятью
- •2.4. Задание для самостоятельной работы
- •Контрольные вопросы
- •3. Лабораторная работа № 3
- •3.1. Цель работы
- •3.2. Пример использования механизма выделения виртуальной памяти для решения конкретных задач
- •3.3. Задания для самостоятельной работы
- •Контрольные вопросы
- •4. Лабораторная работа № 4
- •4.1. Цель работы
- •4. 2. Теоретическое введение
- •4.2.1 Создание или открытие объекта ядра «файла»
- •4.2.2 Создание объекта ядра «файл, проецируемый в память»
- •4.2.3 Проецирование файловых данных на адресное пространство процесса
- •4.2.4 Отмена проецирования на адресное пространство процесса объекта ядра «файл, проецируемый в память»
- •4.2.5 Закрытие объектов ядра «файл, проецируемый в память» и «файл»
- •4.3 Примеры программ, выполняющих проецирование в память
- •4.3.1 Пример 1
- •4.3.2 Пример 2
- •4.4. Задания для самостоятельной работы
- •Контрольные вопросы
- •5. Лабораторная работа № 5
- •5.1.Цель работы
- •5.2. Теоретическое введение
- •5.2.1. Создание процесса
- •5.2.2. Запуск внешней программы функцией WinExec
- •5.2.3. Запуск внешней программы и открытие документа функцией ShellExecute
- •При успешном выполнении функция ShellExecute возвращает целое значение, большее 32. Значение меньшее или равное 32 указывает на ошибку. Значения эти те же, что и для функции WinExec.
- •5.2.4. Создание потока
- •5.2.5. Завершение процесса
- •5.2.6. Завершение потока
- •5.2.7. Изменение класса приоритета процесса
- •5.2.8. Получение информации о классе приоритета процесса
- •5.2.9. Изменение уровня приоритета потока
- •5.2.10. Получение информации о приоритете потока
- •5.3. Примеры программ для работы с процессами и потоками
- •5.3.1. Создание процесса с помощью функции CreateProcess.
- •5.3.2. Создание процесса с помощью функции WinExec.
- •5.3.3. Создание процесса с помощью функции ShellExecute.
- •5.3.4. Создание многопоточного приложения.
- •5.4. Задания для самостоятельной работы
- •Контрольные вопросы
- •6. Лабораторная работа № 6
- •6.1. Цель работы
- •6.2. Теоретическое введение
- •6.2.1. Получение «мгновенного снимка» системы
- •6.2.2. Получение информации о процессах
- •6.2.3. Получение информации о потоках
- •6.2.4. Получение информации о модулях
- •6.2.5. Информация о кучах (heap)
- •6.2.6. Информация о виртуальной памяти.
- •6.2.7. Алгоритм работы функций ToolHelp
- •6.2.8. Как получить карту памяти любого процесса
- •6.3. Пример использования функций ToolHelp
- •6.4. Задания для самостоятельной работы
- •Контрольные вопросы
- •7. Лабораторная работа № 7
- •7.1. Цель работы
- •7.2. Теоретическое введение
- •7.2.1. Критические секции
- •7.2.2. Синхронизация с использованием объектов ядра
- •7.2.3. Wait-функции
- •7.2.4. Синхронизация с использованием процессов и потоков
- •7.2.5. Объекты Mutex
- •7.2.6. Семафоры
- •7.2.7. События
- •7.3 Примеры работы с объектами синхронизации
- •7.3.1 Пример 1
- •7.3.1 Пример 2
- •7.4. Задания для самостоятельной работы
- •Контрольные вопросы
- •8. Лабораторная работа № 8
- •8.1. Цель работы
- •8.2 Теоретическое введение
- •8.2.1 Создание dll
- •8.2.2 Неявная загрузка dll
- •8.2.3 Явная загрузка dll
- •8.2.4 Внедрение dll в адресное пространство другого процесса
- •8.3 Пример работы с dll
- •8.3.1 Создание dll, которая выполняет перехват нажатых клавиш
- •8.3.2 Разработка приложения, которое выполняет анализ и обработку нажатых клавиш.
- •8.4 Индивидуальные задания
- •Контрольные вопросы
- •9.2.2. Функции для работы с объектом «уведомление об изменении файловой системы»
- •9.3. Пример работы системы уведомления об изменениях в файловой системе
- •9.4. Задания для самостоятельной работы
- •Контрольные вопросы
- •Литература
- •214013 Г. Смоленск, Энергетический проезд, 1
Контрольные вопросы
Объясните различие между такими параметрами, как «Регион адресного пространства», «Блок в регионе адресного пространства» и «страница виртуального адресного пространства»?
Объясните алгоритм преобразования виртуального адреса в физический?
Как подсчитать количество регионов в адресном пространстве процесса?
Как подсчитать количество блоков в регионе, имеющих один и тот же тип физической памяти?
4. Лабораторная работа № 4
ФАЙЛЫ, ПРОЕЦИРУЕМЫЕ В ПАМЯТЬ
4.1. Цель работы
Цель работы заключается в освоении методов работы с файлами, проецируемыми в память.
Механизм проецирования в память позволяет резервировать регион адресного пространства и передавать ему физическую память. Причем физическая память в этом случае берется из файла, уже находящегося на диске. Данный метод позволяет обойтись без операций файлового ввода-вывода и предварительной буферизации содержимого файла. Проецируемые файлы применяются для загрузки EXE- и DLL-файлов, а также для разделения данных между несколькими процессами, выполняемыми на одной машине.
4. 2. Теоретическое введение
Механизм проецирования в память состоит из следующих этапов:
Создание или открытие объекта ядра «файла», который будет использоваться как проецируемый в память
Создание объекта ядра «файл, проецируемый в память».
Проецирование файловых данных на адресное пространство процесса.
Работа с данными, содержащимися в фале, спроецированном в память.
Отмена проецирования на адресное пространство процесса объекта ядра «файл, проецируемый в память».
Закрытие объект ядра «файл, проецируемый в память».
Закрытие объект ядра «файл».
4.2.1 Создание или открытие объекта ядра «файла»
Для создания или открытия объекта ядра «файл» используется функция:
function CreateFile (lpFileName: PChar; dwDesiredAccess: DWORD; dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes;
dwCreationDisposition: DWORD; dwFlagsAndAttributes: DWORD;
hTemplateFile: THandle) : THandle;
где
lpFileName – определяет имя создаваемого или открываемого файла.
dwDesiredAccess - указывает способ доступа к содержимому файла. Возможные значения параметра fdwAccess приведены в таблице 4.1.
dwShareMode - указывает тип совместного доступа к данному файлу. Возможные значения параметра fdwShareMode приведены в таблице 4.2.
Таблица 4.1 Возможные значения параметра dwDesiredAccess
Значение параметра dwDesiredAccess |
Описание |
0 |
Содержимое файла нельзя считывать и записывать. С помощью данного атрибута можно только получить атрибуты файла |
GENERIC_READ |
Чтение файла разрешено |
GENERIC_WRITE |
Запись в файл разрешена |
GENERIC_READ or GENERIC_WRITE |
Разрешено чтение файла и запись в файл |
lpSecurityAttributes – указывает на структуру SECURITY_ATTRIBUTES, которая содержит информацию о защите объекта ядра «файл».Если защиты не нужно, в этот параметр заносится nil.
dwCreationDisposition – указывает флаги для тонкой настройки функции CreateFile. Возможные значения параметра dwCreationDisposition приведены в таблице 4.3.
Таблица 4.2 Возможные значения параметра fdwShareMode
Значение параметра fdwShareMode |
Описание |
0 |
Запрещены любые попытки повторного открытия файла |
FILE_SHARE_READ |
Посторонний процесс может открыть данный файл только для чтения |
FILE_SHARE_WRITE |
Посторонний процесс может открыть данный файл только для записи |
FILE_SHARE_READ or FILE_SHARE_WRITE |
Посторонний процесс может открыть данный файл без ограничений |
Таблица 4.3 Возможные значения параметра dwCreationDisposition
Значение параметра dwCreationDisposition |
Описание |
CREATE_NEW |
Функция создает новый файл, но сообщает об ошибке, если файл с таким именем уже существует |
CREATE_ALWAYS |
Функция создает файл независимо от того, существует ли уже файл с таким именем. Если файл существует, то замещается новым |
OPEN_EXISTING |
Функция открывает существующий файл и сообщает об ошибке, если файла с таким именем нет. |
OPEN_ALWAYS |
Функция открывает файл, если он существует, и создает новый, если такого нет |
TRUNCATE_EXISTING |
Функция открывает файл и урезает его до нулевой длины, но сообщает об ошибке, если указанного файла нет. Если указан данный флаг, то параметр fdwAccess должен иметь значение GENERIC_WRITE |
dwFlagsAndAttributes – указывает атрибуты создаваемого файла. Если функция открывает уже существующий файл, то информация об атрибутах игнорируется. Возможные значения параметра dwFlagsAndAttributes приведены в таблице 4.4. Перечисленные в таблице 4.4. флаги можно объединять с помощью функции or.
Таблица 4.4 Возможные значения параметра dwFlagsAndAttributes
Значение параметра dwFlagsAndAttributes |
Описание |
FILE_ATTRIBUTE_ARCHIVE |
Файл является архивным. Данный атрибут используют для того, чтобы пометить файлы для резервного копирования. При создании нового файла атрибут FILE_ATTRIBUTE_ARCHIVE устанавливается автоматически |
FILE_ATTRIBUTE_HIDDEN |
Файл является скрытым |
FILE_ATTRIBUTE_NORMAL |
У файла нет атрибутов. Данный атрибут допустим только, если используется один. |
FILE_ATTRIBUTE_READONLY |
Файл только для чтения |
FILE_ATTRIBUTE_SYSTEM |
Файл является частью операционной системы и используется только ею. |
hTemplateFile – задает либо дескриптор открытого файла, либо равен 0. В первом случае функция игнорирует параметр dwFlagsAndAttributes и использует флаги и атрибуты, связанные с файлом, который определяется параметром hTemplateFile. Чтобы такая схема сработала, файл, заданный параметром hTemplateFile, нужно открыть с флагом GENERIC_READ. Если функция CreateFile открывает существующий файл, этот параметр игнорируется.
При успешном создании или открытии файла, функция CreateFile возвращает его дескриптор. В случае ошибки функция CreateFile возвращает INVALID_HANDLE_VALUE (-1).
С помощью функции CreateFile операционная система узнает, на каком диске находится физическая память для проекции файла.