В современную цифровую эпоху быстрый запуск и эффективная работа системы чрезвычайно важны для пользователей. Система Windows может запускать множество служб за короткий промежуток времени. За этим стоит системный процесс, называемый Service Control Manager (SCM). Работа SCM имеет решающее значение для повышения скорости запуска системы. Давайте подробнее рассмотрим, как работает этот процесс. р>
SCM — это специальный системный процесс в операционных системах серии Windows NT. Он отвечает за запуск, остановку и управление процессами служб Windows. р>
Исполняемый файл SCM находится в %SystemRoot%\System32\services.exe, и его основная задача — запустить все службы, настроенные на автоматический запуск. При запуске системы процесс Wininit запустит SCM заранее и начнет серию задач инициализации. р>
В процессе запуска SCM сначала считывает информацию о службе из реестра. Это касается двух ключевых записей реестра:
<ул>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\List — Содержит имена и порядок запуска групп служб. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services - фактическая база данных служб и драйверов устройств. Эта информация помогает SCM определить порядок запуска каждой службы и их взаимозависимости. SCM также проверяет, успешно ли загружены драйверы устройств, которые должны быть запущены во время процесса загрузки, и сохраняет неисправные драйверы в списке под названием ScFailedDrivers. р>
После обработки всех служб автозапуска без отсрочки SCM начнет загрузку служб автозапуска с отсрочкой, что является новой функцией, представленной после Windows Vista для ускорения запуска системы. Обычно эти отложенные службы инициализируются примерно через 120 секунд после запуска системы. р>При обработке каждой автоматически запущенной службы SCM также будет учитывать зависимости порядка загрузки, чтобы избежать возникновения циклических зависимостей. р>
Для запуска каждой службы SCM вызывает функцию ScStartService(), чтобы проверить, что учетная запись, под которой запущен ее процесс, совпадает с учетной записью, указанной службой. Во время этого процесса, если служба не запущена под системной учетной записью, SCM вызовет функцию LSASS LogonUserEx() для получения необходимой информации для входа пользователя. Эта информация хранится в разделе реестра HKLM\SECURITY\Policy\Secrets\, и только службы с полным доступом могут получить эти «секретные» пароли. р>
Процесс службы приостанавливается при его создании, и его выполнение не возобновится до тех пор, пока не будет установлено конвейерное соединение. р>
После успешного запуска процесса обслуживания SCM установит канал связи с процессом обслуживания, создав именованный канал. Процесс службы присоединяется к этому каналу, вызывая функцию StartServiceCtrlDispatcher(), а затем SCM отправляет службе команду «запуск». р>
Наличие службы отложенного автоматического запуска значительно улучшает баланс запуска системы. Хотя эти службы технически не сильно отличаются от обычных служб автозапуска, они предназначены для инициализации на разных этапах запуска системы, чтобы обеспечить ее бесперебойную работу. р>
SCM также управляет драйверами устройств. Типы служб этих служб отмечены в реестре как SERVICE_KERNEL_DRIVER или SERVICE_FILE_SYSTEM_DRIVER. В этих случаях SCM вызывает функцию ScLoadDeviceDriver() для загрузки соответствующего драйвера в систему, что обычно требует вызова системного вызова NtLoadDriver. р>
SCM также может отправлять сообщения в приложения с графическим интерфейсом, такие как Windows Explorer, чтобы уведомить их об изменениях в подключениях к буквам сетевых дисков. р>
Короче говоря, диспетчер управления службами системы Windows играет незаменимую роль в процессе запуска системы. Он эффективно загружает необходимые службы и драйверы устройств для поддержания быстрого отклика и стабильной работы всей системы. При использовании этих технологий учитываем ли мы принципы их работы и технические проблемы, стоящие за ними? р>