Системное программирование в среде Win32

Автор работы: Пользователь скрыл имя, 25 Марта 2014 в 14:49, лекция

Краткое описание

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

Прикрепленные файлы: 1 файл

Win32_лек_часть1.doc

— 811.00 Кб (Скачать документ)

 

Эта функция имеет следующие аргументы. Первые пять – описывают прямоугольник на экране, в который будет вписан bitmap. Следующие пять – та часть bitmap а, которая будет вписана в прямоугольник на экране.

Последний  аргумент – код растровой операции, описывает, как пиксели одного bitmap’a будут взаимодействовать с пикселями другого bitmap’a.

1 и 6 аргументы  – хэндлы окна (hDC) и  совместимого  контекста hCompatibleDC.

2 и 3  (nXOriginDest, nYOriginDest) содержат смещение левого верхнего угла прямоугольника, в который будет вписываться bitmap, относительно левой и верхней сторон рабочей области окна. 4 и 5  (nWidthDest,  nHeightDest) – ширина и высота этого прямоугольника.

7 и 8 (nXOriginSrc,  nYOriginSrc) аналогичны 2 и 3.  9 и 10  (nWidthSrc, nHeightSrc) – высота и ширина отображаемой части bitmap’a.

Для работы с контекстами устройств существуют и другие функции:

    • BitBlt() – копирует bitmap с одного контекста на другой без масштабирования (следовательно, ей не нужны 9 и 10 аргументы – отображается все то, что поместится в отведенную для этого область);
    • PatBlt() – просто закрашивает прямоугольник на экране, используя для этого выбранную в контексте устройства кисть. Раз нет объекта отображения, то нет и аргументов с 6 по 10.

 

2.5. Коды растровых операций

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

Эти логические операции записываются в обратной польской записи.

Польская запись: Операнд1Операнд2Действие. Обратная польская запись: Действие Операнд1Операнд2

 

Обозначение битов:

S – биты, определяющие bitmap совместимого контекста (source)

P - биты заливки (pattern – образец)

D биты, на  которых будет прорисовываться  изображение (distination – назначение, место назначения)

Обозначение операций:

a побитовое  И

n побитовое  НЕТ

o побитовое  ИЛИ

x побитовое  исключающее ИЛИ

 

Пример

Обозначение битов

Значения битов

P

1

1

1

1

0

0

0

0

S

1

1

0

0

1

1

0

0

D

1

0

1

0

1

0

1

0

Обозначение операций

Результат выполнения оперций

PSx

0

0

1

1

1

1

0

0

DPSxx

1

0

0

1

0

1

1

0


 

Краткое описание кодов растровых операций

Таблица 2.3

Наименование

Индекс операции

Польская запись

Эффект 

BLACKNESS

0x00

0

Заполнение действительного контекста черным цветом

NOTSRCERASE

0x11

DSon

 

NOTSRCCOPY

0x33

Sn

Прорисовываемый bitmap отображается в негативном виде

DSTINVERT

0x55

Dn

Изображение действительного контекста проявляется в негативном виде

PATINVERT

0x5A

DPx

 

SRCINVERT

0x66

DSx

 

SRCAND

0x88

DSa

 

MERGEPAINT

0xBB

DSno

 

MERGECOPY

0xC0

PSa

 

SRCCOPY

0xCC

S

Копирование прорисовываемого bitmap на действительный контекст

SRCPAINT

0xEE

DSo

 

PATCOPY

0xF0

P

 

PATPAINT

0xFB

DPSnoo

 

WHITENESS

0xFF

1

Заполнение действительного контекста белым цветом


Понимание логики работы с растровыми операциями может позволить избежать трудоемких преобразований bitmap’ов перед копированием.

 

3. Использование файловой системы  и символьного ввода-вывода

Файловая система и простой ввод-вывод через терминал часто оказываются первыми функциями операционной системы, с которыми сталкивается разработчик. Сфера деятельности старых операционных систем, таких как  MS DOS, ненамного выходила за пределы управления файлами и терминального (или консольного) ввода-вывода, и сейчас эти ресурсы остаются важнейшей частью почти каждой операционной системы.

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

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

В настоящее время Windows использует несколько файловых систем. Первая – FAT, которая используется со времени появления персональных компьютеров. Система HPFS – high perfomance file system (высокопроизводительная файловая система) - была разработана  для операционной системы OS/2 с целью устранения недостатков, присущих FAT, но и она не решила всех проблем, связанных с FAT. Тогда в Windows NT была предложена новая файловая система NTFC. Для работы с компакт-дисками используется еше одна файловая система – CDFS.

Операционная система Windows 2000 использует технологию устанавливаемой файловой системы (installable file system). Это означает, что на одном и том же компьютере может существовать несколько разных файловых систем. Но во всех системах используются одни и те же методы доступа к файлам и работы с файлами.

3.1. Файловые систем и их основные  характеристики

Рассмотрим особенности каждой из перечисленных файловых систем.

  1. Файловая система FAT (File Allocation Table – таблица размещения файлов) происходит от файловых систем MS DOS и Windows 3.1. Система FAT была значительно усовершенствована для поддержки длинных имен файлов. FAT – единственная  файловая система, которую можно применять на дисках Windows 9х и дискетах. Ее разновидность FAT32 управляет дисковым пространством более эффективно.
  2. Файловая система NT(NTFS) используется только в Windows 2000/Windows NT. Кроме поддержки длинных имен файлов, она обеспечивает безопасность, возможность восстановления, сжатия данных, расширенные атрибуты и поддержку очень больших файлов и томов.
  3. Файловая система CD-ROM (CDFS) предназначена для доступа к информации на CD-ROM. Эту систему поддерживает как Windows NT, так и Windows 95.

 

Доступ ко всем файловым системам осуществляется одним и тем же способом, но с ограничениями. Например: только NTFS поддерживает безопасность.

Жесткий диск может быть разбит на несколько разделов (partition), которые затем могут использоваться либо одной ОС, либо различными ОС. Причем на каждом разделе может быть организована своя файловая система. Формат файловой системы дискового раздела или тома определяется после разделения диска. Диск может быть разделен между первыми двумя файловыми системами в любой комбинации. Однако для организации даже одной-единственной файловой системы необходимо определить, по крайней мере, один раздел.

3.2. Именование файлов

Win32 поддерживает  иерархическую схему именования  файлов, включающую следующие правила:

  • Полное имя файла начинается с обозначения привода, например А:  или С:. Диски А:  и  В: - обычно дисководы, С:, D:  и т.д. – жесткие диски и CD_ROM. Сетевые диски обычно обозначаются буквами алфавита, которые завершают ряд дисков, например Н:  и  К:.
  • Полное имя, или имя UNC (Universal Naming Code), может также начинаться  с двойной косой черты, обозначающей глобальный корень, за которой следует имя сервера и имя сетевого ресурса (share), указывающее путь на сетевом файловом сервере. Следовательно, первая часть полного имени: \\ имя_сервера \имя_ресурса.
  • Разделитель полного имени – обратная косая черта (\), хотя в параметрах API может использоваться и косая черта (/).
  • Имена файлов и каталогов не могут содержать символы ASCII с кодами в диапазоне 1 –31 или следующие  символы: <  > :  “  |
  • Имена могут содержать пробелы. Однако при использовании имен файлов с пробелами в командной строке каждое имя файла следует заключать в кавычки, чтобы оно не интерпретировалось как два имени разных фалов.
  • Имена каталогов и файлов нечувствительны к регистру, но регистр в них сохраняется, так что если файл был создан с именем MyFile, оно будет отображаться именно в таком виде, хотя к файлу можно будет обращаться и по имени myFILE.
  • Имена файлов и каталогов могут иметь длину до 255 символов, а длина полных имен ограничена MAX_PATH символами  (в настоящее время 260).
  • Точка (.) отделяет имя файла от его расширения, и расширения весьма часто обозначают тип файла.
  • Имена каталогов . и .. обозначают текущий каталог и его родительский каталог.

3.3. API функции для чтения и записи  в файл

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

Создание и открытие файлов

Первая функция Win32 для работы с файлами -  CreateFile. В зависимости от флагов, которые передаются вызову этой функции, она может применяться для открытия существующих файлов или создания новых.

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

 

Прототип функции CreateFile выглядит следующим образом:

HANDLE CreateFile ( LPCTSTR  lpszName,

DWORD  fdwAccess,

DWORD  fdwShareMode,

LPSECURITY_ATTRIBUTES  lpsa,

DWORD  fdwCreate,

DWORD  fdwAttrsAndFlags,

HANDLE   hTemplateFile).

Возвращаемое функцией значение имеет тип HANDLE.  Это дескриптор открытого файла или INVALID_HANDLE_FAILURE  в случае неудачи. В Win32 определены многочисленные символические константы и флаги. Их имена обычно очень длинны и описывают их назначение. Например, INVALID_HANDLE_FAILURE или GENERIC_READ.

Имена параметров иллюстрируют некоторые соглашения Win32. Префикс fdw используется, когда значение DWORD (32 бита без знака) содержит флаги (флаги – биты, каждый из которых отвечает за какой-либо один параметр; при этом, если значение флага равно 1, то параметр установлен, если – 0, то - нет).

Префикс lpsz (long pointer to a zero-terminated string – длинный указатель на строку с завершающим нулем) используется для полных имен и других строк. Например, параметр lpszName – указатель на строку с завершающим нулем, содержащую имя файла, канала или другого именованного объекта, который требуется открыть или создать.

Параметр fdwAccess определяет режим доступа для чтения и записи значениями GENERIC_READ  и GENERIC_WRITE  соответственно. Эти значения можно объединить с помощью поразрядного «или» ( | ), поэтому для открытия файла для чтения и записи используется следующая комбинация:

GENERIC_READ | GENERIC_WRITE

Параметр fdwShareMode – это набор битовых флагов, объединенных поразрядным “или”, указывающий на режим совместного доступа к объекту.

  • 0 – совместный доступ к файлу не допускается. Даже этот процесс не сможет открыть второй дескриптор данного файла.
  • FILE_SHARE_READ – другие процессы, включая тот, что сделал данный вызов, могут открыть этот файл для параллельного чтения.
  • FILE_SHARE_WRITE – разрешается параллельная запись в файл.
  • FILE_SHARE_DELETE – разрешается параллельное удаление файла.

 

При разработке приложений программист не должен допускать параллельных модификаций одного и того же файла.

Параметр lpsa указывает на структуру  SECURITY_ATTRIBUTES (атрибуты безопасности), определяющую права разных групп пользователей к объектам совместного доступа. Если значение этого параметра NULL, то файл незащищен.

Параметр fdwCreate определяет, надо ли создавать новый файл, заменить существующий и т.д. Отдельные значения можно объединить с помощью поразрядного «или» ( | ).

  • CREATE_NEW – завершается неудачей, если указанный файл уже существует, иначе создается новый.
  • CREATE_ALWAYS – существующий файл; заменяется новым.
  • OPEN_EXISTING – неудача, если файл не существует.
  • OPEN_ALWAYS – файл открывается, если он не существует, то создается и открывается.
  • TRUNCATE_EXISTING – устанавливается нулевая длина файла. При этом в fdwAccess должен быть задан по крайней мере GENERIC_WRITE.

Информация о работе Системное программирование в среде Win32