Несколько терминов в документации Windows для пользователей ипрограммистов имеет разный смысл в разных
контекстах.Например,понятие <<сервис>> может относитсяк вызываемой функции операционной системы,драйверу устройства или
серверному процессу (в последнем случае сервис часто называют службой).
Функции Windows API - документированные,вызываемые подпрограммы в Window API,например CreateProcess,CreateFile,GetMessage. Неуправляемые ("родные") системные
сервисы (или исполняемые системные сервисы) - Недокументированные низкоуровневые сервисы
операционной системы,которые можно вызывать в пользовательском режиме.Так,NtCreateProcess - это внутрисистемный
сервис,вызываемый Windows-функцией CreateProcess при создании нового процесса. Функции ядра - подпрограммы внутри операционной системы Windows,которые можно вызывать только в режиме
ядра.Например,ExAllocatePool - процедура,вызываемая драйверами устройств для выделения памяти
из системных куч (динамически
распределяемых областей памяти) Windows. Windows-сервисы - Процессы,запускаемые диспетчером управления сервисами в Windows.Например,сервис Task Scheduler выполняется
в процессе пользовательского режима,который поддерживает команду at (аналогичную UNIX-команде at или cron). DLL (динамически подключаемая библиотека) - набор вызываемых подпрограмм,включеных в один двоичный файл,который
приложения,использующие эти подпрограммы,могут динамически
загружать во время своего выполнения.В качестве примера можно
привести модули Msvcrt.dll (библиотека исполняющей подсистемы С) и Kernel32.dll (одна из библиотек подсистемы Windows
API).DLL активно используются компонентами и приложениями Windows пользовательского режима.Преимущество DLL над статическими
библиотеками в том,что приложения могут разделять DLL-модули,а Windows гарантирует,что в памяти будет находится лишь по
одному экземпляру используемых DLL. Хотя
на первый взгляд кажется,что программа и процесс - понятия практически одинаковые,они фундаментально отличаются друг от
друга.Программа представляет собой статический набор команд,а процесс - это контейнер для набора ресурсов,используемых при
выполнении экземпляра программы.На самом высоком уровне абстракции процесс в Windows включает следующее:
Закрытое виртуальное адресное пространство - диапазон адрессов виртуальной памяти,которым может пользоваться процесс.
Исполняемую
программу - начальный код и данные,проецируемые на виртуальное адресное пространство процесса.
Список открытых описателей (handles) различных системных ресурсов - семафоров,коммуникационных портов,файлов и других
обьектов,доступных всем потокам в данном процессе.
Контекст защиты (security context),называемый маркером доступа (access token) и иденцифицирующий пользователя,группы
безопасности и привилегии,сопоставленные процессом.
Уникальный идентификатор
процесса (во внутрисистемной терминологии называемый идентификатором клиента).
Минимум один поток.
Каждый процесс также указывает на свой родительский процесс.Однако,если родитель существует,эта информация не
обновляется.Поэтому есть вероятность,что некий процесс указывает на уже несуществующего родителя.Это несоздает никакой
проблемы,поскольку никто непологаетсяна наличие такой информации.