Диспетчер управления службами
Диспетчер управления службами (англ. Service Control Manager, SCM) — в Microsoft Windows (\Windows\System32\Services.exe) особый системный процесс, реализующий технологию удалённого вызова процедур (remote procedure call, RPC). Обеспечивает создание, удаление, запуск и остановку служб ОС. Стартует при загрузке системы, обеспечивает работу журнала событий, а также позволяет выполнять манипуляцию процессами удалённой машины.[1]
Функции
Функции данного сервера представляют интерфейс для выполнения следующих задач:
- Монтирование базы данных установленных служб
- Запуск служб при загрузке операционной системы, либо по требованию
- Получение количественной и качественной информации об установленных службах и системных драйверах
- Пересылка управляющих запросов запущенным службам
- Блокировка и разблокировка базы данных служб
База данных
Монтирование базы данных установленных служб производится в системном реестре и располагается в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
. Данная база используется SCM и другими программами для добавления, изменения или конфигурирования служб.
Начальная структура базы служб создаётся при установке операционной системы и включает в себя следующие данные:
- тип службы
- тип запуска
- уровень контроля ошибок
- полный путь к исполняемому файлу
Также информация о службе может быть дополнена следующими данными:
- информация о зависимостях службы
- логин и пароль учётной записи, с правами которой нужно запускать службу.
В структуре данной базы обязательно присутствуют записи, описывающие системные драйверы, необходимые для запуска операционной системы.
Алгоритм работы
При загрузке операционной системы SCM запускает все службы, у которых указан тип запуска «Автоматически», а также все службы, указанные в зависимостях автозапускаемых служб. Таким образом, при запуске службы с типом запуска «Автоматически», у которой в зависимостях указаны службы с типом запуска «Вручную», последние также будут запущены, несмотря на свой тип запуска.
После загрузки операционной системы пользователь может вручную запустить необходимые службы, воспользовавшись консолью управления службами.
Пользователь также может указать параметры запуска службы, которые будут переданы как аргументы функции StartService при запуске.
Во время запуска службы диспетчер выполняет следующие действия:
- Получение сохранённой в базе данных информации по учётной записи, с правами которой должна запускаться служба
- Авторизация под этой учётной записью
- Получение пользовательского профиля
- Подготовка процесса службы к выполнению
- Привязка доступов учётной записи к порождённому процессу
- Запуск процесса службы на выполнение
Особенности функционирования
При завершении процесса services.exe на экране появится окно Завершение работы системы (так же, как и при завершении процесса Lsass.exe).