Менеджер по управлению услугами - Service Control Manager
Менеджер по управлению услугами (СКМ) - особая система процесс под Windows NT семья операционные системы, который запускается, останавливается и взаимодействует с Служба Windows процессы.[1] Он расположен в % SystemRoot% System32 services.exe
исполняемый файл. Сервисные процессы взаимодействуют с SCM через четко определенный API, и тот же API используется внутри интерактивных инструментов управления службами Windows, таких как MMC оснастка Services.msc
и служебная программа командной строки Service Control sc.exe
. Прерывание этого файла используется как способ вызвать Синий экран смерти.
Выполнение
Исполняемый файл SCM, Services.exe
, запускается как консольная программа Windows и запускается Wininit процесс рано во время запуск системы.[2] Его основная функция, SvcCtrlMain ()
, запускает все службы, настроенные для автоматического запуска. Сначала инициализируется внутренняя база данных установленных служб путем чтения следующих двух разделов реестра:
HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control ServiceGroupOrder List
, содержащий названия и порядок групп обслуживания. Раздел реестра каждой службы содержит необязательныйГруппа
значение, которое определяет порядок инициализации соответствующей службы или драйвер устройства по отношению к другим сервисным группам.HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services
, который содержит фактическую базу данных служб и драйверов устройств и считывается во внутреннюю базу данных SCM.[3] СКМ читает все сервисыГруппа
значение, а также зависимости порядка загрузки от ихDependOnGroup
иDependOnService
ключи реестра.[4]
На следующем этапе основная функция SCM SvcCtrlMain ()
вызывает функцию ScGetBootAndSystemDriverState ()
функция, которая проверяет, были ли успешно загружены драйверы устройств, которые должны быть запущены во время загрузки или запуска системы, и те, которые не смогли этого сделать, сохраняются в списке, называемом ScFailedDrivers
. Затем именованный канал Труба Ntsvcs
создается как удаленный вызов процедур интерфейс между SCM и SCP (процессами управления службами), которые взаимодействуют с конкретными службами.
Затем он вызывает ScAutoStartServices ()
функция, которая петли через все сервисы, помеченные как автозапуск, обращая внимание на рассчитанные зависимости порядка загрузки. В случае циклической зависимости отмечается ошибка, и служба, зависящая от службы, которая принадлежит к группе, приходящей позже в порядке загрузки, пропускается. Для служб с отложенным автозапуском группировка не действует, и они загружаются на более позднем этапе запуска системы.[5]
Для каждой службы, которую он хочет запустить, SCM вызывает ScStartService ()
функция, которая проверяет имя файла, в котором запускается процесс службы, гарантируя, что учетная запись, указанная для службы, такая же, как и учетная запись, в которой выполняется процесс службы. Каждая служба, которая не запускается в Система
учетная запись входит в систему, позвонив LSASS функция LogonUserEx ()
, для которого процесс LSASS ищет "секретные" пароли, хранящиеся в HKLM SECURITY Policy Secrets
ключ реестра, который хранился SCP с использованием LsaStorePrivateData ()
API, когда служба была изначально настроена.[6]
Далее ScLogonAndStartImage ()
функция вызывается для каждой службы, процесс обслуживания которой еще не запущен. Сервисные процессы создаются в приостановленное состояние через CreateProcessAsUser ()
API. Перед возобновлением выполнения служебного процесса именованный канал Pipe Net NtControlPipeX
(где X - это число, увеличивающееся для каждой итерации обслуживания), который служит каналом связи между SCM и процессом обслуживания. Сервисный процесс подключается к каналу, вызывая StartServiceCtrlDispatcher ()
функция, после чего SCM отправляет сервису команду «запустить».[7]
Услуги с отложенным автозапуском
Добавлены сервисы отложенного автозапуска в Виндоус виста, чтобы решить проблему длительного запуска системы, а также ускорить запуск критически важных сервисов, который нельзя отложить.[8] Первоначально метод инициализации службы с автоматическим запуском был разработан для основных системных служб, от которых зависят другие приложения и службы. SCM инициализирует отложенные службы только после обработки всех неотложных служб автозапуска, вызывая ScInitDelayStart ()
функция. Эта функция ставит в очередь отложенный (по умолчанию 120 секунд) рабочий элемент, связанный с соответствующим рабочим потоком. Помимо инициализации после задержки, нет других различий между отложенными и неотложными услугами.
Драйверы устройств
Услуги, чьи Тип
значение реестра SERVICE_KERNEL_DRIVER
или же SERVICE_FILE_SYSTEM_DRIVER
обрабатываются специально: они представляют драйверы устройств, для которых ScStartService ()
называет ScLoadDeviceDriver ()
функция, которая загружает соответствующий драйвер (обычно файл с расширением .sys
), который должен находиться в % SystemRoot% System32 Drivers
каталог. С этой целью NtLoadDriver
системный вызов вызывается, и SeLoadDriverPrivilege
добавляется в процесс SCM.
Буквы сетевых дисков
SCM предоставляет дополнительную функциональность, совершенно не связанную со службами Windows: она уведомляет GUI такие приложения, как проводник Виндоус при создании или удалении сетевого соединения с буквой диска путем широковещательной передачи Windows Сообщения WM_DEVICECHANGE
.
Смотрите также
Примечания
- ^ Руссинович, Соломон и Ионеску (2009 г.:79)[требуется полная цитата ]
- ^ Руссинович, Соломон и Ионеску (2009 г.:291)
- ^ «База данных установленных сервисов». Сеть разработчиков Microsoft. Получено 2011-03-06.
- ^ Руссинович, Соломон и Ионеску (2009 г.:292)
- ^ Руссинович, Соломон и Ионеску (2009 г.:294)
- ^ Руссинович, Соломон и Ионеску (2009 г.:295)
- ^ Руссинович, Соломон и Ионеску (2009 г.:296)
- ^ Руссинович, Соломон и Ионеску (2009 г.:297)
Рекомендации
- Руссинович Марк; Соломон, Давид; Ионеску, Алекс (2009), Внутреннее устройство Windows® (5-е изд.), Microsoft Press, ISBN 0-7356-2530-1