Принципы программирования в арi win32
Почти каждый системный ресурс - это объект ядра, который идентифицируется дескриптором. Объектами ядра должен управлять АРI Win32.
Объекты включают файлы, процессы, потоки, каналы для межпроцессорного взаимодействия, отображения на память, события и многое другое. Объекты имеют атрибуты безопасности.
АРI Win32 – богатый и гибкий интерфейс.
АРI Win32 содержит разнообразные механизмы синхронизации и взаимодействия, специализированные для различных требований.
Основным модулем выполнения в АРI Win32 является не процесс, а поток. Процесс может содержать один или более потоков.
Кроме этих соглашений, существуют также несколько соглашений для имен типов:
а) Имена стандартных типов данных, требуемых для АPI, состоят из символов верхнего регистра, например:
BOOL (определен как 32-разрядный объект для хранения одиночного логического значения);
HANDLE (целый тип)
DWORD (32-разрядный целочисленный беззнаковый тип);
LPTSTR (указатель на строку из 8- или 16-разрядных символов).
б) Для стандартных типов данных не применяется операция * (разыменования). Например,
LPTSTR (определен как TCHAR*);
LPCTSTR (определен как const TCHAR*).
в) Функции в АРI Win32 имеют длинные описательные имена. Например,
CreateProcess() – создать процесс;
GetCurrentDirectory() – получить текущую директорию.
г) Имена переменных, по крайней мере, в прототипах функций, также подчиняются этим соглашениям. Например,
lpszFileName – это длинный указатель на строку символов с завершающим нулем.
Примечание: Много информации можно почерпнуть в системных заголовочных файлах, в которые определяются прототипы функцией, константы, флаги, коды ошибок и т.д. Файл windows.h включает все остальные заголовочные файлы.
Управление процессами
С точки зрения программиста, каждый процесс в АРI Win32 включает следующие компоненты:
Один или несколько потоков;
Виртуальное адресное пространство, отличное от адресных пространств других процессов, за исключением случаев явного разделения памяти;
Один или более сегментов кода, включая код DLL;
Один или более сегментов данных, содержащих глобальные переменные;
Строки окружения с информацией о переменных окружения, таких как текущий путь поиска;
Память кучи процесса;
Такие ресурсы, как открытые дескрипторы и другие кучи.
Все потоки процесса совместно используют код, глобальные переменные, строки окружения и ресурсы. Каждый поток планируется независимо и включает такие элементы:
Стек вызовов процедур, прерываний, обработчиков исключений и автоматических данных;
Локальную память потока (Thread Local Storage – TLS) – массивы указателей, которые дают процессу возможность выделять память для создания собственного уникального окружения данных;
Параметр стека, полученный от потока, создавшего данный стек, и обычно уникальный для каждого потока.
Структуру контекста, управляемую ядром, со значениями аппаратных регистров.