ebook img

Изучение Windows API PDF

34 Pages·00.738 MB·Russian
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Изучение Windows API

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» Кафедра автоматизированных систем управления М. Г. ЖУРАВЛЕВА ИЗУЧЕНИЕ WINDOWS API МЕТОДИЧЕСКИЕ УКАЗАНИЯ к выполнению лабораторных работ по курсам «Операционные системы» и «Операционные системы и оболочки» Липецк Липецкий государственный технический университет 2013 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» УДК 004.451 (07) Ж 911 Рецензент – В. В. Ведищев, канд. техн. наук, доцент Журавлева, М. Г. Ж 911 Изучение Windows API [Текст]: методические указания к выполнению лабораторных работ по курсам «Операционные системы» и «Операционные системы и оболочки» / М.Г. Журавлева. – Липецк: Изд-во ЛГТУ, 2013. – 34 с. Рассмотрены функции Windows API для управления файлами, процессами, потоками, мьютексами, семафорами и событиями в классических приложениях современных ОС семейства Windows. Представлены порядок выполнения лабораторной работы и оформления отчета, задания к лабораторным работам с вариантами, теоретические сведения с пояснениями, контрольные вопросы. Предназначены для студентов третьего курса факультета автоматизации и информатики специальности 010503.65, изучающих дисциплину «Операционные системы и оболочки», студентов третьего курса факультета автоматизации и информатики специальности 230102.65 и направлений 230100.62, 010500.62, 231000.62, а также студентов второго курса факультета автоматизации и информатики направления 230401.51, изучающих дисциплину «Операционные системы». Табл. 6. Библиогр.: 4 назв.  ФГБОУ ВПО «Липецкий государственный технический университет», 2013 2 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Общие сведения Лабораторный практикум предполагает изучение внутреннего устройства операционных систем (ОС) посредством разработки консольных приложений в ОС семейства Windows с использованием Windows API. Все программы следу- ет разрабатывать на языках C/C++, используя там, где возможно, функции Win- dows API. Теоретические сведения для каждой лабораторной работы включают описание требуемых функций и/или пояснения. Некоторые детали описания представленных функций опущены, минимальные требования к ОС-клиенту для большей части функций – Windows XP [1, 2]. Рекомендуемый порядок выполнения лабораторной работы: 1. Построение алгоритма решения задачи. 2. Написание программы: проверка корректности вводимых пользовате- лем данных (при вводе пользователем некорректных данных следует выводить сообщение об ошибке); написание функций, выполняющих выбранные в соот- ветствии с вариантом операции; реализация интерфейса пользователя. 3. Тестирование программы, обработка результатов работы. 4. Оформление отчета в соответствии с СТО-13-2011, в основную часть должны быть включены следующие пункты: название лабораторной работы; цель работы; краткие теоретические сведения; описание экспериментальной установки и методики эксперимента; экспериментальные результаты; обработ- ка и анализ результатов работы; выводы. Перед началом работы в лаборатории студент обязан пройти инструктаж по технике безопасности, ознакомиться с расположенными на стенде лаборато- рии инструкцией № 396 по охране труда для операторов и пользователей ЭВМ, выпиской из норм и правил ЛГТУ по охране труда, извлечениями из инструк- ции по пожарной безопасности зданий, сооружений и помещений ЛГТУ. Исходные данные для лабораторных работ выбираются из таблиц прил. по номеру варианта, который соответствует номеру студента в журнале препо- давателя. С примерами программ можно ознакомиться в [1]. 3 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Лабораторная работа № 1 Разработка программ обработки файлов в ОС Windows Цель работы Получение навыков использования функций Windows API, обеспечиваю- щих обработку файлов. Задание кафедры Написать программу вставки n строк исходного файла в заданную пози- цию результирующего файла и последующей установки/получения атрибутов результирующего файла. Исходные данные указываются пользователем в аргу- ментах командной строки: количество строк – в качестве второго аргумента, номера строк – в качестве третьего – [(n+3)-1]-го аргументов, далее следуют имена исходного и результирующего файлов, следующий аргумент – позиция, в которую следует вставлять строки (исходные данные выбираются из табл. 1 прил.). Теоретические сведения Обработка файлов средствами Windows API предполагает использование традиционных функций создания и открытия, чтения и записи, перемещения указателя, закрытия файлов. 1. Создание и открытие файла: «HANDLE WINAPI CreateFile( LPCTSTR lpFName, DWORD dwDesAccess, DWORD dwShMode, LPSECURITY_ATTRIBUTES lpSAttributes, DWORD dwCreatDisposition, DWORD dwFlgAndAttributes, HANDLE hTempFile );», где lpFName – имя создаваемого или открываемого файла/устройства (под устройством понимается каталог, физический диск, том, буфер консоли, канал и др.). В этом имени можно использовать прямые (/) или обратные (\) слэши. В ANSI-версии функции длина имени ограничивается значением MAX_PATH, 4 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» для увеличения длины до 32767 символов можно вызывать UNICODE-версию, помещая перед именем префикс "\\?\"; dwDesAccess – требуемый тип доступа к файлу/устройству: GENERIC_READ (чтение), GENERIC_WRITE (запись), GENERIC_READ | GENERIC_WRITE (чтение или запись) и др.; dwShMode – требуемый режим совместного использования файла/устройства: FILE_SHARE_READ (параллельное чтение), FILE_SHARE_WRITE (парал- лельная запись), FILE_SHARE_READ | FILE_SHARE_WRITE (параллельные чтение или запись), FILE_SHARE_DELETE (параллельный запрос на удале- ние/переименование), 0 (разделение запрещено) и др.; lpSAttributes – указатель на структуру SECURITY_ATTRIBUTES, содержащую дескриптор безопасности, контролирующий доступ к файлу/устройству, и при- знак наследуемости возвращаемого функцией CreateFile дескриптора. Если значение данного параметра – NULL, дескриптор не наследуется; dwCreatDisposition – действие, которое нужно совершить с фай- лом/устройством: CREATE_NEW (создать новый, если он еще не существует), CREATE_ALWAYS (создать новый, если существует, создать заново), OPEN_ALWAYS (открыть, при необходимости – создать и открыть), OPEN_EXISTING (открыть только существующий), TRUNCATE_EXISTING (открыть только существующий, сделав его размер нулевым); dwFlgAndAttributes – атрибуты и флаги файла/устройства, параметр может включать комбинацию (с помощью «|») из любых доступных атрибутов: FILE_ATTRIBUTE_NORMAL (значение по умолчанию, не устанавливается од- новременно с другими атрибутами), FILE_ATTRIBUTE_READONLY (только чтение), FILE_ATTRIBUTE_ARCHIVE (архивный), FILE_ATTRIBUTE_- HIDDEN (скрытый) и другие атрибуты и флаги; hTempFile – дескриптор файла-шаблона с правом доступа «GENERIC_READ», предоставляет атрибуты файла и расширенные атрибуты для создаваемого фай- ла, может принимать значение NULL. Если операция успешна, функция возвращает открытый дескриптор фай- ла/устройства, иначе - INVALID_HANDLE_VALUE. 5 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 2. Закрытие файла (и других объектов): «BOOL WINAPI CloseHandle( HANDLE hObj );», где hObj – дескриптор открытого объекта (файла). Функция закрывает также дескрипторы процессов, потоков, событий, мьютексов, семафоров, каналов и других объектов. Если операция успешна, функция возвращает не ноль, иначе ноль. 3. Чтение файла: «BOOL WINAPI ReadFile( HANDLE hF, LPVOID lpBuf, DWORD nNumberBytesToRead, LPDWORD lpNumberBytesRead, LPOVERLAPPED lpOverlap );», где hF – дескриптор файла/устройства; lpBuf – указатель на буфер для считанных данных; nNumberBytesToRead – максимальное количество считываемых байтов; lpNumberBytesRead – указатель на переменную, получающую количество счи- танных байтов при синхронном дескрипторе hF, при асинхронном дескрипторе (когда hF был открыт с флагом FILE_FLAG_OVERLAPPED) следует использо- вать NULL. Параметр может быть NULL, только если lpOverlap не NULL; lpOverlap – указатель на структуру OVERLAPPED, передается в том случае, ес- ли hF - асинхронный. В этом случае в структуре OVERLAPPED в полях Offset и OffsetHigh предварительно устанавливается байтовое смещение, с которого бу- дет осуществляться чтение файла. Если операция успешна, возвращаемое значение – не ноль. 4. Запись в файл: «BOOL WINAPI WriteFile( HANDLE hF, LPCVOID lpBuf, DWORD nNumBytesToWrite, LPDWORD lpNumBytesWritten, LPOVERLAPPED lpOverlap );», где hF – дескриптор файла/устройства; 6 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» lpBuf – указатель на буфер с данными для записи в файл/устройство; nNumberBytesToWrite – количество записываемых байтов; lpNumberBytesWritten – указатель на переменную, получающую количество за- писанных байтов при синхронном дескрипторе hF, при асинхронном дескрип- торе (когда hF был открыт с флагом FILE_FLAG_OVERLAPPED) следует ис- пользовать NULL. Параметр может быть NULL, только если lpOverlap не NULL; lpOverlap – указатель на структуру OVERLAPPED, передается в том случае, ес- ли hF – асинхронный. В этом случае в структуре OVERLAPPED в полях Offset и OffsetHigh предварительно устанавливается байтовое смещение, с которого будет осуществляться запись в файл. Если операция успешна, возвращаемое значение – не ноль. 5. Перемещение указателя файла: «DWORD WINAPI SetFilePointer( HANDLE hF, LONG lDistanceMove, PLONG lpDistanceMoveHigh, DWORD dwMoveMeth );», где hF – дескриптор файла, который должен быть создан с правами GENERIC_READ или GENERIC_WRITE; lDistanceMove – младшие 32 разряда целого со знаком, указывающие количе- ство байт, на которые нужно переместить указатель файла; положительное зна- чение перемещает указатель вперед, отрицательное – назад; если lpDistanceMoveHigh – не NULL, lpDistanceMoveHigh и lDistanceMove – 64-битные целые со знаком, в противном случае – lDistanceMove является 32-битным целым со знаком; lpDistanceMoveHigh – указатель на старшие 32 разряда 64-битного расстояния для перемещения указателя; dwMoveMeth – начало для перемещения указателя: начало файла – FILE_BEGIN(0), текущая позиция – FILE_CURRENT(1), конец файла – FILE_END(2). 7 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Если операция успешна и lpDistanceMoveHigh – NULL, функция возвра- щает младшее слово новой величины указателя файла, если же lpDistanceMoveHigh – не NULL, в lpDistanceMoveHigh дополнительно записы- вается старшее слово новой величины указателя; если операция неуспешна, функция возвращает INVALID_SET_FILE_POINTER. 6. Получение атрибутов файла: «DWORD WINAPI GetFileAttributes( LPCTSTR lpFName );», где lpFName – имя файла или каталога. Если операция успешна, функция возвращает атрибуты файла/каталога в виде целого числа, иначе – INVALID_FILE_ATTRIBUTES. Чтобы узнать, уста- новлен ли конкретный атрибут, результат следует побитово умножить («&») на одно из значений атрибутов: FILE_ATTRIBUTE_ARCHIVE (архивный), FILE_ATTRIBUTE_HIDDEN (скрытый), FILE_ATTRIBUTE_NORMAL (не имеющий иных атрибутов), FILE_ATTRIBUTE_READONLY (только для чте- ния), FILE_ATTRIBUTE_SYSTEM (используется ОС), FILE_ATTRIBUTE_- TEMPORARY (используется для временного хранения), FILE_ATTRIBUTE_- COMPRESSED (сжатый), FILE_ATTRIBUTE_DIRECTORY (каталог), FILE_ATTRIBUTE_ENCRYPTED (зашифрованный), FILE_ATTRIBUTE_- NOT_CONTENT_INDEXED (неиндексированный) и др. 7. Установка атрибутов файла: «BOOL WINAPI SetFileAttributes( LPCTSTR lpFName, DWORD dwFAttributes );», где lpFName – имя файла или каталога, для которого устанавливаются атрибу- ты; dwFAttributes – один или несколько устанавливаемых атрибутов файла из числа первых шести вышеперечисленных, а также некоторых других. Одновременная установка атрибутов выполняется с использованием побитового «или» («|»), с атрибутом FILE_ATTRIBUTE_NORMAL никакие другие атрибуты не устанав- ливаются. Если операция успешна, функция возвращает не ноль, иначе – ноль. 8 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Контрольные вопросы 1. Аргументы командной строки. 2. Функции управления файлами. 3. Создание, открытие и закрытие файла. 4. Чтение файла. 5. Запись в файл. 6. Перемещение указателя файла. 7. Получение и установка атрибутов файла. 8. Сжатые и зашифрованные файлы. Лабораторная работа № 2 Создание процессов и перенаправление ввода/вывода Цель работы Получение базовых навыков создания и управления процессами с помо- щью функций Windows API, создания наследуемых дескрипторов объектов и реализации наследования дескрипторов, перенаправления стандартного вво- да/вывода дочерних процессов на файлы. Задание кафедры Написать программу, запускающую несколько внешних программ (по- рождающую несколько процессов) в определенном порядке, а также создаю- щую наследуемые дескрипторы файлов исходного процесса и перенаправляю- щую дескрипторы ввода/вывода первых трех дочерних процессов на файлы ис- ходного процесса. При этом число процессов и порядок их создания, способ перенаправления (P: 1 – изменения в STARTUPINFO, 2 – с помощью GetStdHandle/SetStdHandle), порядок перенаправления (Q: 1 – ввод, вывод, ввод/вывод, 2 – вывод, ввод/вывод, ввод, 3 – ввод/вывод, ввод, вывод) выбира- ются из табл. 2 прил.). Пути к внешним программам задаются в качестве аргументов командной строки. 9 Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Теоретические сведения 1. Создание процесса (функция создает процесс и его главный поток): «BOOL WINAPI CreateProcess( LPCTSTR lpApplicName, LPTSTR lpComLine, LPSECURITY_ATTRIBUTES lpProcAttributes, LPSECURITY_ATTRIBUTES lpThrAttributes, BOOL bInhHandles, DWORD dwCreatFlags, LPVOID lpEnvir, LPCTSTR lpCurDirectory, LPSTARTUPINFO lpStartInfo, LPPROCESS_INFORMATION lpProcInformation );», где lpApplicName – указатель на строку с именем запускаемого модуля (про- граммы). Строка может содержать полный путь и имя файла или сокращенное имя (всегда следует указывать расширение). В последнем случае функция ис- пользует текущие диск и каталог для завершения определения. Данный пара- метр может быть равен NULL, в этом случае имя запускаемого модуля должно быть указано в первом слове строки, на которую указывает lpComLine (слова разделяются пробелами). Если имя файла содержит пробелы, следует заклю- чать его в кавычки. Если запускаемый модуль – 16-битное приложение, пара- метр lpApplicName должен быть равен NULL, а строка, на которую указывает lpComLine, должна содержать имя модуля и его аргументы; lpComLine – указатель на командную строку для выполнения. Максимальная длина –32768, включая символ конца строки. Если параметр lpApplicName ра- вен NULL, длина имени модуля ограничивается MAX_PATH. Для UNICODE- версии функции данный параметр не может быть указателем на память «только для чтения». Если lpComLine – NULL, функция использует в качестве команд- ной строки строку, на которую указывает lpApplicName. Если lpApplicName – NULL, первое слово строки, на которую указывает lpCom- Line, является именем загружаемого модуля: оно может быть указано без рас- ширения, если модуль – exe-файл. Если имя модуля не содержит путь, система ищет загружаемый модуль, последовательно просматривая: – каталог, в котором загружено приложение; – текущий каталог родительского процесса; 10

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.