
- •Введение
- •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
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФИЛИАЛ ФЕДЕРАЛЬНОГО ГОСУДАРСТВЕННОГО БЮДЖЕТНОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ «МЭИ» В Г. СМОЛЕНСКЕ
В.В. Малахов, И.В. Малашенкова, Е.А. Панкратова, О.В. Семенова
ПРОГРАММИРОВАНИЕ ПРИЛОЖЕНИЙ С ИСПОЛЬЗОВАНИЕМ WINDOWS API
Смоленск 2011
УДК 004.42 (07)
М 18
Допущено учебно-методическим Советом филиала ФГБОУ ВПО «НИУ МЭИ» в
г. Смоленске в качестве методического пособия для студентов, обучающихся в филиале ФГБОУ ВПО «НИУ МЭИ» в г. Смоленске по направлению подготовки бакалавров «Информатика и вычислительная техника»
Подготовлено на кафедре «Вычислительной техники»
Рецензент
Кандидат технических наук филиала ФГБОУ ВПО «НИУ МЭИ» в г. Смоленске Ю.Г. Бояринов
Малахов В.В. ПРОГРАММИРОВАНИЕ ПРИЛОЖЕНИЙ С ИСПОЛЬЗОВАНИЕМ WINDOWS API. Методические указания к лабораторным работам по дисциплине «Операционные системы» / В.В. Малахов, И.В. Малашенкова, Е.А. Панкратова, О.В. Семенова. – Смоленск: РИО филиала ФГБОУ ВПО «НИУ МЭИ» в г. Смоленске, 2012. – 100 с.
В методических указаниях приводятся описания лабораторных работ, соответствующие программе курса «Операционные системы».
Каждая лабораторная работа посвящена одному из разделов курса «Операционных систем» – работа с виртуальной памятью, механизм проецирования в память, создание процессов и потоков, синхронизация процессов и потоков, создание динамически подключаемых библиотек, отслеживание изменений файловой системы, отслеживание нажатых клавиш и т.д.
©филиал ФГБОУ ВПО «НИУ МЭИ» в г. Смоленск 2011
Введение
В методических указаниях к лабораторным работам по дисциплине «Операционные системы» рассматриваются основные теоретические принципы построения современных операционных систем, а также реализующие их технологии.
В данном сборнике содержится информация, необходимая для программирования в среде API Win32, целью сборника является описание концепций, структур и механизмов операционной системы Windows.
Несмотря на разнообразие операционных систем, ряд фундаментальных принципов остается неизменным – это программирование виртуальной памяти, процессов, потоков, объектов синхронизации, создание динамически подключаемых библиотек и т.д. Все перечисленные вопросы рассматриваются в данном сборнике.
При выполнении лабораторных работ студенты используют знания, полученные ранее при изучении дисциплин «Организация ЭВМ» и «Программирование на языках высокого уровня»
На основе полученных знаний студентам легче будет осваивать такие предметы, как «Операционные системы реального времени», «Системное и программное обеспечение», «Методы и средства защиты компьютерной информации», «Сети ЭВМ и телекоммуникации» и т.д.
1. Лабораторная работа № 1
ПОЛУЧЕНИЕ ХАРАКТЕРИСТИК КОМПЬЮТЕРА И ОПЕРАЦИОННОЙ СИСТЕМЫ
1.1. Цель работы
Целью данной работы является изучение процедур и функций Win32, позволяющих получить общую информации о характеристиках компьютера и операционной системы.
Для IBM совместимых ПК специфическими признаками программно-аппаратной среды являются:
тип ПК и версия операционной системы;
состав аппаратных средств;
физическое положение файлов на дисковом носителе;
наличие скрытых частей программы;
физические особенности (в том числе дефекты) носителя.
Некоторые из этих признаков очень индивидуальны (например, физические особенности некачественного носителя), другие обладают меньшей индивидуальностью (тип ПК, версия DOS).
В данной лабораторной работе рассматриваются функции Win32, с помощью которых можно получить перечисленную информацию.
1.2. Теоретическое введение
1.2.1. Получение информации об операционной системе
Для получения информации об операционной системе используется функция GetVersionEx:
function GetVersionEx(var lpVersionInformation: TOSVersionInfo): BOOL;
где
lpVersionInformation – структура типа TOSVersionInfo, состоящая из ряда полей, в которые функция GetVersionEx записывает информацию об операционной системе.
TOSVERSIONINFO = record
dwOSVersionInfoSize: DWORD; dwMajorVersion: DWORD; dwMinorVersion: DWORD; dwBuildNumber: DWORD; dwPlatformId: DWORD; szCSDVersion: array[0..127] of AnsiChar;
end;
Описание полей структуры TOSVersionInfo приведены в таблице 1.1.
Таблица 1.1 Поля структуры TOSVersionInfo
Поле |
Описание |
1 |
2 |
dwOSVersionInfoSize |
Определяет размер структуры в байтах |
dwMajorVersion, dwMinorVersion |
Определяет версию ОС в формате Major.Minor (Например, 3.51 ) |
Продолжение таблицы 1.1
1 |
2 |
dwBuildNumber |
Номер ОС |
dwPlatformId |
Платформа Windows. Возможные значения для платформы Windows приведены в таблице 1.2. |
szCSDVersion |
Версия Service Pack |
Таблица 1.2 Возможные значения поля dwPlatformId из структуры TOSVersionInfo
Значение константы |
Описание |
VER_PLATFORM_WIN32s |
Win32s on Windows 3.1. |
VER_PLATFORM_WIN32_WINDOWS |
Win32 on Windows 95. |
VER_PLATFORM_WIN32_NT |
Win32 on Windows NT. |
При успешном завершении функция GetVersionEx возвращает ненулевое значение (True).