Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сервисы-пос1.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
688.64 Кб
Скачать

1.2. Три компонента сервиса

Для работы сервисов предназначены три вида компонентов ОС Windows:

  1. Диспетчер управления сервисами ( Service Control Manager – SCM ), исполняемым файлом которого является - \Windows\System32\Services.exe, выполняется как консольная программа. Процесс запускается автоматически в момент начальной загрузки системы и прекращает работу в момент выгрузки системы.Очевидно, что SCM-процесс запускается с привилегиями системы и предоставляет унифицированный и безопасный интерфейс сервисам системы. Задача SCM управлять сервисами: запускать, настраивать, приостанавливать, продолжать и завершать их работу.

  2. Сам «сервис», по сути являясь Win32-приложением, содержит дополнительный код, позволяющий ему принимать информацию и команды от SCM и возвращать ему статусную информацию.

  3. Программа управления сервисом ( Service Control Program – SCP ). Это Win32-приложение ( далее SCP-приложение), которое предоставляет пользователю графический интерфейс для работы с сервисами. Такая программа позволяет пользователю управлять работой сервиса: запускать, приостанавливать, возобновлять и останавливать его работу. Поскольку SCM является RPC-сервером, то SCP-приложение может взаимодействовать с ним удаленно. Администратор, используя SCP-приложение на одном компьютере может посредством SCM другого компьютера управлять работой на нем сервисов. Для этого SCP-приложение использует специальные функции управления сервисом, позволяющие обращаться к SCM.

1.3. Диспетчер управления сервисами (scm)

Как уже отмечалось, сервисы или службы, рассматриваемые в данном учебном пособии, - это процессы режима пользователя. Они похожи на процессы-демоны Unix и могут быть запущены автоматически при запуске системы. Этими сервисами управляет специальный системный процесс, называемый Диспетчер управления сервисами (Service Control Manager – CSM ) - \Windows\System32\Services.exe, отвечающий за запуск, остановку и взаимодействие с процессами сервисов. Другими словами, диспетчер управления сервисами исполняется в процесссе services.exe и является консольным Win32-приложением. Место в архатектуре Windows диспетчера управления сервисами показано на (рис.1).

Для взаимодействия SCM с сервисами Windows предоставляет специальные API-функции, с помощью которых выполняются такие действия как регистрация успешного запуска сервиса, ответы на запросы о состоянии, приостановка или завершение работы сервиса.

Процесс Winlogon запускает SCM на начальном этапе загрузки системы вызовом функции SvcCtrlMain. Функция SvcCtrlMain создает синхронизирующее событие с именем SvcCtrlEvent_A3752DX и устанавливает ему состояние – занято. Затем функция

Рис.1. Архитектура Windows

SvcCtrlMain вызывает функцию SvcCreateServiceDB, которая создает базу данных сервисов SCM. Функция SvcCreateServiceDB считывает и сохраняет разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder в параметре List типа REG_MULTI_SZ список имен и порядок определенных групп сервисов. Если сервису или драйверу нужно отслеживать порядок запуска относительно других групп, то в раздел реестра этого сервиса включается параметр Group.

В разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\

Control\Ser-vices находится база данных диспетчера управления сервисами (SCM) (Рис.2). Для каждого установленного драйвера и сервиса создается запись, содержащая следующую информацию:

  • Тип сервиса. Необходим для того, чтобы различать сервисы уровня пользователя и драйверы. Для сервисов уровня пользователя тип указывает, выполняется ли сервис в собственном процессе или разделяет адресное пространство процесса с другими сервисами. Для драйвара указывается, является ли он драйвером ядра или драйвером файловой системы.

  • Способ запуска (автоматически при старте системы, по запросу приложения, управляющего сервисом либо запрет запуска). В системе может быть установлено три значения для этого поля: Авто ( automatic ), Вручную ( manual ), Отключено ( disabled ).

  • Уровнь контроля ошибок. Указывает серьезность ошибки, если служба или драйвер не запускается при запуске системы, и определяет действия в случае аварийного завершения сервиса или ошибки при запуске (отсутствие действий, перезапуск сервиса или перезапуск системы).

  • Полный путь к исполняемому файлу (т.е. путь к программе сервиса - файлу с расширением. EXE или драйверу – с расширением. SYS ).

  • Информация о зависимостях, т.е. о том, какие сервисы должны быть запущены до запуска данного. Для драйвера, эта информация включает в себя список драйверов, которые должны быть запущены до указанного драйвера.

  • Имя учетной записи и пароль. Сервисная программа выполняется в контексте этой учетной записи. Если учетная запись не указана, то сервис выполняется в контексте учетной записи LocalSystem.

  • Для драйверов, дополнительно указывается имя объекта драйвера (например, \ FileSystem \ Rdr или \ Driver \ XNS), используемая система ввода / вывода для загрузки драйвера устройства. Если имя не задано, то система ввода / вывода создает имя по умолчанию на основе службы имен драйверов.

С помощью SCP-апплета можно установить или изменить тип запуска. Кроме этого можно посмотреть под чьей учетной записью запускается сервис на вкладке «Вход в систему» ( Log On ).

Рис.2. Редактор реестра. Просмотр ключа

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

Базу данных сервисов не рекомендуется изменять самостоятельно (при помощи функций работы с реестром). Вместо этого, следует обращаться к API-функциям, предоставляемым диспетчером управления сервисами (SCM).

Перед запуском автоматически запускаемых сервисов ( здесь как сервисы, так и драйверы ) SCM выполняет еще несколько действий. Создает именованный канал RPC с именем \Pipe\Ntsvcs. После чего RPC запускает поток, отслеживающий приходящие по этому каналу сообщения от SCP. Затем SCM освобождает свой объект типа событие SvcCtrlEvent_A3752DX, сигнализируя о завершении инициализации. SCP устанавливает связь с SCM с помощью функции OpenSCManager, которая ждет перехода события SvcCtrlEvent_A3752DX в свободное состояние.