ЖУРНАЛ «СТА» №2/2006

зовы одним драйвером других драйве- ров для организации обработки за- проса по цепочке. Упрощённая схема организации подсистемы вводавыво- да [2] изображена на рис. 2. Подсис- тема вводавывода Windows проекти- ровалась с целью обеспечения макси- мальной гибкости, как с точки зрения возможности её расширения драйве- рами специфических устройств, так и с учётом поддержки максимального абстрагирования устройств для при- кладных приложений. Важными мо- ментами обеспечения подобной функциональности являются возмож- ности динамической загрузки (явной или на основе перечисления) и вы- грузки драйверов, обобщённый вид формируемых структур запросов на вводвывод и диспетчеризация. Од- ним из инструментов регистрации, запуска, останова и выгрузки драйве- ров служит механизм управления сер- висами. С ЕРВИСЫ Сервисы (Services), или службы, яв- ляются процессами, предоставляющи- ми дополнительную функциональ- ность в системе, не зависящую от ин- терактивных действий пользователя. То есть это приложения, запускаемые без учёта того, зарегистрировался ли в системе какойлибо пользователь или нет, и довольно часто запуск самого сервиса происходит до момента появ- ления окна регистрации пользователя. В части взаимодействия с системой сервисы используют «язык» Windows API и функционально состоят из трёх компонентов: ● Service application — сервисное при- ложение (или драйвер); ● Service control program (SCP) — программа управления сервисом; ● Service Control Manager (SCM) — диспетчер управления сервисом. Весь необходимый API для реализа- ции механизма диспетчеризации (SCMфункции) сервисов сосредото- чен в системной DLLбиблиотеке Advapi32.dll (Advanced API). Сервисное приложение — это драй- вер или обычное Windowsприложение (чаще всего реализуемое как консоль- ное приложение), имеющее дополни- тельный блок кода, обеспечивающий обработку команд от SCP и возврат ему определённой статусной инфор- мации. SCP — стандартное Windowsпри- ложение, использующее для управле- ния сервисом функции из набора SCMфункций. В основном SCPпри- ложение предназначено для запуска, останова и конфигурирования серви- са, иногда это приложение расширяет политику управления сервисом по от- ношению к реализуемой SCMфункции. В рамках ОС Windows существуют встроенные SCP, но для увеличения возможностей конфигу- рирования сервиса разработчик мо- жет написать свою собственную про- грамму SCP, возможно, даже не реа- лизуя её как отдельное приложение, а встраивая её функции в основное приложение, использующее сервис. Сервисные приложения только кос- венно взаимодействуют с SCP, изме- няя свою статусную информацию в процессе выполнения команд от SCM. Перед использованием SCMфункций SCP необходимо уста- новить канал связи с SCM (использу- ется функция OpenSCManager). Важ- ным моментом является то, что при установке любого приложения, в рам- ках которого предполагается исполь- зование сервиса, необходимо предва- рительно зарегистрировать сервис, вызвав функцию CreateService (реали- зована в Advapi32.dll). На основании параметров вызова этой функции SCM создаёт для каждого сервиса ин- дивидуальный раздел в ветке реестра HKEY_LOKAL_MACHINE\SYSTEM\ CurrentControlSet\Service (основная информационная база SCM, или ServicesActive database), куда помеща- ется как параметр вновь созданного раздела реестра информация о месте расположения на диске исполняемого файла соответствующего сервиса, его параметры при старте и конфигураци- онные настройки (эти настройки по- мещаются в подраздел Parameters соз- данного для сервиса раздела). SCM отвечает за загрузку как серви- сов, так и драйверов, поэтому не уди- вительно, что значения некоторых па- раметров явным образом указывают на контекст текущего приложения. Об- щий термин (Services), используемый Microsoft для обозначения как служб, так и драйверов устройств (они дейст- вительно во многом схожи по стилю работы и характеру выполняемых функций), часто вызывает путаницу в понимании программной документа- ции. Наиболее важные для нашей при- кладной задачи параметры созданного раздела реестра и их возможные значе- ния для драйверов и сервисов показа- ны в таблице 1. На конечном этапе загрузки ОС системный процесс Winlogon (перед появлением диалогового окна с при- П Р О Г РАММНО Е ОБ Е С П Е Ч Е НИ Е / Д РАЙ В Е Р Ы 71 СТА 2/2006 www.cta.ru сервисы Windows Диспетчер родительского режима PnP Диспетчер электропитания Пользовательский режим Режим ядра Устанавливаемые компоненты INF , CAT файлы, реестр Процедуры WDM, WMI Приложения пользователя Диспетчер PnP Диспетчер ввода вывода Драйверы Подсистема ввода вывода Уровень абстрагирования от оборудования (HAL) Приложения пользователя Рис. 2. Компоненты подсистемы ввода-вывода

RkJQdWJsaXNoZXIy MTQ4NjUy