
- •1.1 Основы программирования в операционной системе Windows
- •1.1.1 Вызов функций api
- •1.1.2 Структура программы
- •1.2 Вопросы системного программирования в Windows
- •1.2.1 Страничная и сегментная адресация.
- •1.2.2 Адресное пространство процесса.
- •2.1 Управление процессами
- •2.2 Процессы и потоки в Windows
- •2.3 Создание процессов
- •2.4 Определение исполняемого образа и командной строки
- •2.5 Идентификация процессов
- •3.1 Создание потока. Функция CreateThread
- •3.2. Завершение потока
- •3.3 Другие функции работы с потоками
- •3.4 Структура context
- •3.5 Приоритеты потоков
- •4.1 Объект critical_section
- •4.2 Мьютексы
- •4.3 Семафоры
- •5.1 События
- •7.1 Кучи
- •7.2 Управление памятью кучи
- •Другие функции для работы с кучей
- •Резюме по управлению кучей
- •Отображение адресного пространства процесса в объекты отображения
- •Что такое импорт
- •Явная загрузка dll
- •Явное подключение экспортируемого идентификатора
- •10.1 Управление файлами и каталогами Создание и открытие файлов
- •10.2 Управление каталогами
- •10.3 Другие методы получения атрибутов файлов и каталогов
- •11.1 Блокировка файлов
- •11.2 Реестр
- •12.1 Стандартные устройства и консольный ввод-вывод
- •12.2 Асинхронный ввод-вывод и порты завершения
- •Параметры
- •Цели системы безопасности
- •Параметры
- •Аварийное завершение
- •Использование именованных каналов
- •Параметры
- •Наблюдение за сообщениями в именованном канале
- •Параметры
Лекция1. Тема: Введение. Вопросы системного программирования.
1.1 Основы программирования в операционной системе Windows
Рассмотрим два момента, которые крайне важны для начала программирования в среде Windows — это вызов системных функций (API-функций) и возможные структуры программ для Windows. Пирогов выделяет шесть типов структур программ, которые условно можно назвать следующим образом:
– классическая структура — имеет одно главное окно;
– диалоговая структура — главным окном является диалоговое окно;
– консольный тип — главным окном является консольное окно (создаваемое или наследуемое);
– безоконная структура — это Windows -приложение, не имеющее главного окна;
– сервисы — программы, имеющие специальную структуру и играющие особую роль в операционной системе;
– драйверы — имеющие особую структуру программы для управления внешними устройствами.
Рассмотрим первую, классическую структуру.
Итак, начнем с нескольких общих положений о программировании в Windows.
1. Программирование в Windows основывается на использовании функций API (Application Program Interface, Программный интерфейс приложения). Взаимодействие с внешними устройствами и ресурсами операционной системы будет происходить посредством таких функций.
2. Список функций АРI и их описание лучше всего брать из файла WIN32.HLP, который поставляется, например, с пакетом Borland C++. Подробнейшее описание по функциям API и по программированию в среде Windows в целом содержится в документации к Visual Studio.NET.
3. Главным элементом программы в среде Windows является окно. Для каждого окна определяется своя процедура обработки сообщений.
4. Окно может содержать элементы управления: кнопки, списки, окна редактирования и др. Эти элементы, по сути, также являются окнами, но обладающими особыми свойствами. События, происходящие с этими элементами (и самим окном), приводят к приходу сообщений в процедуру окна (вызов процедуры с определенными параметрами, определяющими событие).
5. Операционная система Windows использует линейную адресацию памяти. Другими словами, всю память можно рассматривать как один сегмент.
6. Следствием пункта 5 является то, что мы фактически не ограничены в объеме данных, кода или стека (объеме локальных переменных). Сегменты в тексте программы позволяют задать отдельным фрагментам кода (секциям) определенные свойства: запрет на запись, общий доступ и т. д.
7. Операционная система Windows является многозадачной средой. Каждая задача имеет свое адресное пространство и свою очередь сообщений. Более того, даже в рамках одной программы может быть осуществлена многозадачность — любая процедура может быть запущена как самостоятельная задача.
1.1.1 Вызов функций api
Начнем с того, как можно вызвать функции API. Выберем любую функцию API, например, MessageBox:
int MessageBox (HWND hwnd, LPCTSTR 1pText, LPCTSTR 1pCaption, UINT uType);
Данная функция выводит на экран окно с сообщением и кнопкой (или кнопками) выхода. Смысл параметров:
hWnd – дескриптор окна, в котором будет появляться окно-сообщение,
lpText – текст, который будет появляться в окне,
lpCaption – текст в заголовке окна,
uType – тип окна, в частности можно определить количество кнопок выхода.
Теперь о типах параметров. Все они в действительности 32-битные целые числа:
HWND – 32-битное целое,
LPCTSTR – 32-битный указатель на строку,
UINT – 32-битное целое.