Читайте также:
|
|
Как уже отмечалось, сервисы или службы, рассматриваемые в данном учебном пособии, - это процессы режима пользователя. Они похожи на процессы-демоны 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 в свободное состояние.
Дата добавления: 2015-08-13; просмотров: 63 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Службы Windows. | | | Программы управления сервисами |