Объекты kernel32 являются ключевыми структурами данных ОС и находятся в куче, которой владеет kernel32. Например, в Windows 95,98 около 17 объектов, в Windows 2000 около 26 объектов. Примеры объектов:
объект-процесс
объект-поток
объект-файл
объект-файл проецируемый в память
объект-семафор
объект-событие
объект-mutex
объект-почтовый слот
объект-сокет
объект-именованный программный канал
Такая структура как модули не является объектом ядра. Каждый объект ядра начинается с заго-ловка. Он состоит из нескольких полей.
1. Тип объекта. Заносится постоянная, характеризующая тип объекта. В зависимости от типа объекта интерпретируются другие поля.
2. Счётчик ссылок на объект. Определяет сколько раз программный код обращается к объекту. Когда оно станет равно 0, то ОС удаляет объект.
Процесс – есть субъект владения. Процесс владеет памятью, то есть своим ВАП. Владеет дескрипторами файлов, которые прикладная программа может использовать для чтения записи, владеет потоками, списками модулей, dll, которые необходимы процессу для работы. Процесс не представляет исполнение программного кода. За выполнение программного кода отвечают потоки. Каждый процесс связан с файлом на диске. Но файл становится процессом только тогда, когда загружен в память на выполнение.
Для работы с процессом ОС создаёт структуру базы данных процесса. Эта база данных PDB. EPROCESS – управляющая структура (идентификатор).
Однозначно сослаться на него можно с помощью дескриптора процесса и идентификатора процесса. Дескриптор – это индекс в таблице дескрипторов процесса, а указателем на процесс является сожержимое таблицы процесса.
TD
PDB
0
1
2
Идентификатор процесса является указателем на базу данных процесса. Функции Win32 для работы с процессами.
CreateProcess(…) – создаёт новый процесс.
ExitProcess(…) – завершает процесс с уведомлением всех подключенных dll.
TerminateProcess(…) – завершает процесс без уведомления подключенных dll.
GetProcessTimes(…) – получает временные параметры процесса. Определяет сколько времени в режиме ядра, а сколько в пользовательском режиме. В Windows 95, 98 функция не поддерживается.
GetCurrentProcess(…) – можно получить дескриптор текущего процесса.
GetCurrentProcessId(…) – можно получить идентификатор текущего процесса.
GetExitCodeProcess(…) – возвращает код завершения процесса.
GetCommandLine(…) – возвращает указатель на командную строку, переданную текущему процессу, то есть можно получить входные параметры с помощью неё.
GetEnvironmentString(…) – возвращает адрес блока переменных окружения.