Управление сервисами и драйверами windows. Управление оборудованием и драйверами

Предупреждение : данный процесс подразумевает некоторую степень риска, а потому желательно иметь хотя бы общее представление о том, что мы собираемся сделать. Если надо вернуть все службы в состояние по умолчанию, то загрузить готовые рег-файлы можно . Выбираете свою систему и загружаете архив. После закачки архив распаковываете и запускаете рег-файл.

Полное описание служб, а также название и отображаемое имя можно посмотреть и изменить состояние по этому пути: Пуск - Панель управления - Администрирование - Службы.

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

AST Service (Nalpeiron Licensing Service) - Отключена .

BranchCache (Эта служба кэширует сетевое содержимое, полученное от кэширующих узлов локальной подсети) - Вручную .

DHCP-клиент (Регистрирует и обновляет IP-адреса и DNS-записи для этого компьютера) - Авто

DNS-клиент (Служба DNS-клиента (dnscache) кэширует имена DNS (Domain Name System) и регистрирует полное имя данного компьютера.) - Отключено . При наличии сети - Авто

KtmRm для координатора распределенных транзакций (Координирует транзакции между MS DTC и диспетчером транзакций ядра (KTM).) - Вручную .

Microsoft .NET Framework NGEN v2.0.50727_X86 (Microsoft .NET Framework NGEN) - Вручную.

Parental Controls (Эта служба является заглушкой для функциональных возможностей службы родительского контроля Windows, которая существовала в ОС Vista.) - Вручную .

Plug-and-Play (Позволяет компьютеру распознавать изменения в установленном оборудовании и подстраиваться под них, либо не требуя вмешательства пользователя, либо сводя его к минимуму) - Авто

Quality Windows Audio Video Experience (Quality Windows Audio Video Experience (qWave) - сетевая платформа для потоковой передачи аудио и видео в домашних сетях на основе IP-протокола) - Вручную .

Remote Desktop Configuration (Remote Desktop Configuration) - Вручную .

Superfetch (Поддерживает и улучшает производительность системы.) - Авто

Windows Audio (Управление средствами работы со звуком для программ Windows.) - Авто .

Windows CardSpace (Это обеспечивает надежную возможность создания, управления и раскрытия цифровых удостоверений.) - Вручную

Windows Driver Foundation - User-mode Driver Framework (Управление хост-процессами драйверов пользовательского режима.) - Вручную .

Windows Search (Индексирование контента, кэширование свойств и результатов поиска для файлов, электронной почты и другого контента.) - Авто . Если не пользуетесь поиском на компьютере, то можно и Отключить .

WMI Performance Adapter (Provides performance library information from Windows Management Instrumentation (WMI) providers to clients on the network.) - Вручную .

Автонастройка WWAN (Эта служба управляет мобильными широкополосными (GSM и CDMA) карточками данных и встроенными модульными адаптерами, а также подключениями и автоматической настройкой сетей.) - Вручную .

Автономные файлы (Служба автономных файлов выполняет работу по обслуживанию кэша автономных файлов,) - Вручную .

Агент защиты сетевого доступа (Агент службы защиты доступа к сети собирает и управляет сведениями о работоспособности клиентских компьютеров в сети) - Вручную .

Агент политики IPsec (Безопасность протокола IP (IPsec) поддерживает проверку подлинности кэширующих узлов на сетевом уровне) - Вручную .

Адаптивная регулировка яркости (Предназначена для наблюдения за датчиком внешнего освещения и корректировки яркости монитора в соответствии с изменениями освещенности.) - Вручную .

Архивация Windows (Поддержка архивации и восстановления в Windows.) - Вручную .

Биометрическая служба Windows (Биометрическая служба Windows предназначена для сбора, сравнения, обработки и хранения биометрических данных в клиентских приложениях без получения непосредственного доступа к биометрическим образцам или оборудованию) - Вручную .

Брандмауэр Windows (Брандмауэр Windows помогает предотвратить несанкционированный доступ к вашему компьютеру через Интернет или сеть.) - Отключено . Используется Брандмауэр от стороннего производителя.

Веб-клиент (Позволяет Windows-программам создавать, получать доступ и изменять файлы, хранящиеся в Интернете) - Вручную .

Виртуальный диск (Предоставление служб управления дисками, томами, файловыми системами и массивами запоминающих устройств.) - Вручную .

Вспомогательная служба IP (Provides tunnel connectivity using IPv6 transition technologies) - Вручную .

Вторичный вход в систему (Позволяет запускать процессы от имени другого пользователя) - Вручную .

Группировка сетевых участников (Включает многосторонние взаимодействия с помощью группировки одноранговой сети.) - Вручную .

Дефрагментация диска (Предоставляет возможность дефрагментации дисков.) - Вручную . Можно оставить и Авто , задав расписание для запуска.

Диспетчер автоматических подключений удаленного доступа (Создает подключение к удаленной сети, когда программа обращается к удаленному DNS- или NetBIOS-имени или адресу.) - Вручную .

Диспетчер печати (Загрузка файлов в память, чтобы напечатать позже) - Авто . Если нет принтера, то Отключено .

Диспетчер подключений удаленного доступа (Управляет подключениями удаленного доступа и виртуальной частной сети (VPN) с данного компьютера к Интернету или другим удаленным сетям.) - Вручную .

Диспетчер сеансов диспетчера окон рабочего стола (Обеспечивает запуск и обслуживание диспетчера окон рабочего стола) - Авто .

Диспетчер удостоверения сетевых участников (Предоставляет службы идентификации для протокола однорангового разрешения имен (PNRP) и группировки одноранговой сети) - Вручную .

Диспетчер учетных данных (Обеспечивает защищенное хранение и извлечение учетных данных пользователей,) - Вручную .

Диспетчер учетных записей безопасности (Запуск этой службы служит для других служб сигналом о том, что диспетчер учетных записей безопасности (SAM) готов к приему запросов.) - Авто .

Доступ к HID-устройствам (Обеспечивает универсальный доступ к HID-устройствам) - Вручную .

Журнал событий Windows (Эта служба управляет событиями и журналами событий) - Авто .

Журналы и оповещения производительности (Служба журналов производительности и оповещений собирает данные с локальных и удаленных компьютеров соответственно заданным параметрам расписания, а затем записывает данные в журнал или выдает оповещение.) - Вручную .

Защита программного обеспечения (Разрешает загрузку, установку и принудительное применение цифровых лицензий для Windows и приложений Windows) - Авто .

Защитник Windows (Защита от шпионских и потенциально опасных программ) - Авто . Но все же рекомендуется использовать продукты от сторонних производителей для защиты своего компьютера от вирусов.

Изоляция ключей CNG (Служба изоляции ключей CNG размещается в процессе LSA) - Вручную .

Инструментарий управления Windows (Предоставляет общий интерфейс и объектную модель для доступа к информации об управлении операционной системой, устройствами, приложениями и службами.) - Авто .

Информация о совместимости приложений (Обработка запросов на проверку совместимости для приложений по мере их запуска) - Вручную .

Клиент групповой политики (Данная служба ответственна за применение параметров, определенных администраторами для компьютеров и пользователей через компонент групповой политики.) - Авто .

Клиент отслеживания изменившихся связей (Поддерживает связи NTFS-файлов, перемещаемых в пределах компьютера или между компьютерами в сети.) - Авто .

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

Кэш шрифтов Windows Presentation Foundation (Оптимизирует производительность приложений Windows Presentation Foundation (WPF) путем кэширования обычно используемых данных шрифтов.) - Вручную .

Ловушка SNMP (Принимает сообщения перехвата, созданные локальными или удаленными агентами SNMP и пересылает их программам управления SNMP, запущенными на этом компьютере.) - Вручную .

Локатор удаленного вызова процедур (RPC) (В Windows 2003 и более ранних версиях Windows служба "Локатор удаленного вызова процедур (RPC)" управляла базой данных службы имен RPC.) - Вручную .

Маршрутизация и удаленный доступ (Предлагает услуги маршрутизации организациям в локальной и глобальной сетя) - Отключена .

Модули ключей IPsec для обмена ключами в Интернете и протокола IP с проверкой подлинности (Служба IKEEXT содержит модули для работы с ключами в Интернете (IKE) и по протоколу IP с проверкой подлинности (AuthIP).) - Авто .

Модуль запуска процессов DCOM-сервера (Служба DCOMLAUNCH запускает серверы COM и DCOM в ответ на запросы активации объектов) - Авто .

Модуль поддержки NetBIOS через TCP/IP (Осуществляет поддержку NetBIOS через службу TCP/IP (NetBT) и разрешение имен NetBIOS для клиентов в сети) - Вручную .

Немедленные подключения Windows - регистратор настройки (Служба WCNCSVC содержит конфигурацию Windows Connect Now (реализация протокола WPS от Майкрософт)) - Вручную

Обнаружение SSDP (Обнаруживает сетевые устройства и службы, использующие протокол обнаружения SSDP, такие как устройства UPnP) - Вручную .

Обнаружение интерактивных служб (Включает уведомление пользователя о необходимости пользовательского ввода для интерактивных служб, которое предоставляет доступ к диалоговым окнам, созданным интерактивными службами, по мере их появления.) - Вручную

Обозреватель компьютеров (Обслуживает список компьютеров в сети и выдает его программам по запросу) - Вручную .

Общий доступ к подключению к Интернету (ICS) (Предоставляет службы трансляции сетевых адресов, адресации, разрешения имен и службы предотвращения вторжения для домашней сети или сети небольшого офиса.) - Отключена .

Определение оборудования оболочки (Предоставляет уведомления для событий автозапуска на различных устройствах.) - Авто .

Основные службы доверенного платформенного модуля (Разрешает доступ к доверенному платформенному модулю (TPM), который предоставляет услуги криптографии на основе оборудования компонентам системы и приложениям.) - Вручную

Устройства и драйверы для них делятся на две категории: с поддержкой PnP и без. Для большинства PnP-устройств драйвер есть на CD с Windows Server 2003. При установке нового устройства система автоматически находит для него драйвер и выделяет для него ресурсы (запросы на прерывание IRQ и каналы прямого доступа к памяти DNA). В случае если системе не удается найти подходящий драйве, она запросит его у пользователя, а устройство в консоли Диспетчер задач будет помечено восклицательным знаком в желтом треугольнике. Если системе вообще не удается определить тип устройства, тогда запрос на драйвер не выдается, а устройство помечается знаком вопроса в желтом треугольнике как неизвестное.

Для обновления конфигурации устройств служит оснастка Диспетчер устройств. Ее можно использовать в двух видах: с деревом устройств, с деревом ресурсов для устройств (настраивать ресурсы вручную не рекомендуется). Оснастку Диспетчер устройств для редактирования конфигурации можно использовать только на локальном компьютере, на удаленном компьютере она работает в режиме только для чтения. Для получения подробной сводки об устройствах и драйверах, можно использовать утилиту командной строки DriverQuery.

Администраторы компьютера могут устанавливать любые устройства и драйверы. Обычные пользователи могут устанавливать драйвера в следующих случаях: драйвер имеет цифровую подпись, файлы драйвера уже есть на компьютере и для дальнейшей установки не требуется дополнительного вмешательства пользователя, причем необходимо соблюдение всех трех условий одновременно (эти условия, как правило, справедливы для принтеров, USB-устройств и для шины IEE1394).

Начиная с Windows 2000 драйвера для устройств имеют цифровую подпись, которая показывает, что файл не был изменен в процессе использования. Некоторые драйвера могут не иметь цифровой подписи. В случае если драйвер не подписан, можно настроить три варианта действия системы: Пропускать (устанавливать драйвер, даже если нет подписи. Доступен только для администратора), Предупреждать (спрашивать у пользователя устанавливать ли драйвер), Блокировать (не устанавливает драйвера без цифровой подписи).

В оснастке Диспетчер устройств можно обновлять драйвера для выбранного устройства (например, если производитель выпустил новую версию). В случае если после установки нового драйвера в работе устройства возникли проблемы, то можно вернуться к предыдущей версии драйвера, нажав на кнопку Откатить. Также драйвера для устройств можно удалять (если это PnP-устройство, удаление драйвера повлечет удаление самого устройства, если драйвер устройства был добавлен вручную, оно останется в системе, но без сконфигурованного драйвера. В случае если у устройства есть дополнительные свойства, с помощью которых можно осуществлять его настройку, доступ к ним будет осуществляться с такими же правами, что и к Диспетчеру задач. Ограничить доступ к таким настройкам также можно с помощью групповой политики.

При возникновении неполадок в работе устройств можно использовать следующие средства: возврат предыдущей версии драйвера (если система загружается), загрузка последней удачной конфигурации (сработает в случае если неполадка случилась до последнего удачного входа в систему), безопасный режим (загружается минимальный набор драйверов и подсистем (после загрузки можно отключить в Диспетчере устройств), консоль восстановления (применяется в случае если все вышеперечисленное не дает эффекта, позволяет управлять устройствами и драйверами из командной строки, но необходимо знать имя устройства или файл драйвера). При возникновении ошибок устройств в Диспетчере устройств отображаются коды состояний, позволяющие определить тип ошибки. Описание кодов можно найти в справочной системе Windows.

Для управления устройствами и связанными с ними драйверами существует несколько инструментов: "Диспетчер устройств", "Устройства и принтеры", " Device Stage™" и инструмент Pnputil, который запускается из командной строки с повышенными привилегиями.

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

  • Просмотреть список установленных устройств
  • Удалить устройство
  • Включить и отключить устройство
  • Устранить неполадки устройства
  • Обновить драйвер устройства
  • Откатить драйвер.

Состояние устройства показывает, имеет ли оно установленные драйверы и может ли Windows взаимодействовать с этим устройством. Чтобы просмотреть состояние устройства:

  1. Щелкните правой кнопкой мыши на устройстве и выберите команду "Свойства".
  2. Перейдите на вкладку "Общие" и в области состояния, просмотрите описание текущего состояния устройства.

С помощью "Диспетчера устройств" можно управлять устройствами только на локальном компьютере.

Устройства и принтеры.

Категория "Устройства и принтеры" в панели управления так же предоставляет дополнительную возможность для управления устройствами. Для облегчения сложной конфигурации задачи, через весь процесс установки вас проведет Мастер конфигурации. Windows 7 распознает новые устройства и пытается автоматически загрузить и установить все, необходимые для этого устройства драйверы.

Устройства, которые отображаются в "Устройствах и принтерах", обычно являются внешними устройствами, которые вы подключаете или отключаете от компьютера через порт или сетевое подключение.

В разделе "Устройства и принтеры", отображается многофункциональный принтер, который вместо индивидуального принтера может управляться как одно устройство, сканер или Факс-устройство. Каждый отдельный компонент многофункционального принтера в диспетчере устройств отображается и управляется отдельно.

Device Stage

Device Stage предоставляет пользователям новый способ для доступа к устройствам и дополнительные опции для управления ими. Устройства отображаются на панели задач как фото-иконка. Этот значок на панели задач может предоставить быстрый доступ к общим задачам устройства; Индикаторы состояния, которые позволяют пользователям быстро понять состояние батареи, состояние синхронизации устройства, оставшиеся емкость, ссылки на руководство пользователя, дополнительные приложения, информационное сообщество и помощь, или дополнительные продукты и услуги.

Введение

Здесь описывается программирование служб
в ОС Windows (я также буду употреблять термин
"сервис",что равносильно термину "служба"),
приводится пример использования для
загрузки драйверов или руткитов.

Сервисы

При старте ОС запускается менеджер служб(SCM
Manager).Считывая данные из реестра (имя
сервиса, способ загрузки, тип драйвера и т.д.),
он составляет базу данных для управления
службами. Я опишу некоторые функции, с
помощью которых можно управлять сервисами.
Сначала требуется создать связь с этой
базой данных (SCM database), затем передать
указатель баз данных некоторым функциям,
управляющими сервисами.

Как я уже сказал, первым делом нужно
создать связь с базой данных SCM. Для этого
служит функция OpenSCManager.

SC_HANDLE OpenSCManager(LPCTSTR lpMachineName, LPCTSTR
lpDatabaseName, DWORD dwDesiredAccess);

LPCTSTR lpMachineName - указатель на строку,
завершающуюся нулём, указывающую на имя
локального компьютера. Этот параметр
можно установить в NULL.

LPCTSTR lpDatabaseName- указатель на строку,
завершающуюся нулём, содержащая в себе имя
открываемой базы данных.Этот параметр
также слудует установить в NULL.

DWORD dwDesiredAccess - этот параметр содержит в себе
флаги, означащие права доступа к базе
данных.Я не буду перечислять все флаги, в
данной статье я рассматриваю только те
возможности программирования служб, нужные
для загрузки руткитов.

SC_MANAGER_ALL_ACCESS - стандартные права доступа к БД.
SC_MANAGER_CONNECT - разрешает соединяться с БД SCM.
SC_MANAGER_CREATE_SERVICE- разрешает создание новых
сервисов.

Создав связь с БД SCM,вы можете управлять
сервисами.

Функция OpenService служит для получения
описателя службы. Учтите, что эта функция не
создаёт службу, для создания службы служит
CreateService, а открывает уже созданную ранее
службу.

SC_HANDLE OpenService(SC_HANDLE hSCManager, LPCTSTR
lpServiceName, DWORD dwDesiredAccess);

SC_HANDLE hSCManager - указатель, возвращенный
функцией OpenSCManager.

LPCTSTR lpServiceName - имя открываемого сервиса.

DWORD dwDesiredAccess- права с которыми мы можем
открыть службу. Вот некоторые из них:

SERVICE_ALL_ACCESS- это стандартные права доступа.
SERVICE_START-разрешает запуск работы сервиса.
SERVICE_STOP-разрешает остановку работы сервиса.

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

Эта функция нужна для создания сервиса (службы).

SC_HANDLE CreateService(SC_HANDLE hSCManager, LPCTSTR
lpServiceName, LPCTSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType,
DWORD dwStartType, DWORD dwErrorControl, LPCTSTR lpBinaryPathName, LPCTSTR
lpLoadOrderGroup, LPDWORD lpdwTagId, LPCTSTR lpDependencies, LPCTSTR
lpServiceStartName, LPCTSTR lpPassword);

Первый параметр (hSCManager) указывает на
указатель, возвращенный функцией OpenSCManager.
Следующие два параметра указывают на
строки, содержащие имя создаваемой службы и
имя, которое будет использовано
пользовательским интерфейсом. Следующий
параметр содержит в себе флаги,
определяющие права доступа к службе. Здесь
используются те же флаги, что и в функции
OpenService. В большинстве случаев понадобится
установка этого флага в SERVICE_ALL_ACCESS. Параметр
dwServiceType определяет тип создаваемого
сервиса. В данном случае нужно установить
его в SERVICE_KERNEL_DRIVER, что в свою очередь
означает, что сервис будет управлять
драйвером уровня ядра. Другие же значения
означают, что это будет драйвер файловой
системы и т.д. Параметр dwStartType очень важен, т.к
определяет способ старта службы. В нашем
случае его следует установить в
SERVICE_BOOT_START или SERVICE_AUTO_START, что означает
практически одно и тоже - запуск службы во
время запуска самой операционной системы.
Параметр dwErrorControl указывает на способ
обработки возникающих ошибок, в нашем
случае его следует установить в SERVICE_ERROR_NORMAL.
Следующий параметр - lpBinaryPathName - указатель на
завершающуюся нулём строку, указывающую на
полный путь к драйверу (в нашем случае
руткиту), которым будет управлять служба.
Следующие пать параметров следует
установить в NULL, т.к. они не важны в данном
случае.

Для запуска службы существует функция
StartService.

BOOL StartService(SC_HANDLE hService, DWORD
dwNumServiceArgs, LPCTSTR *lpServiceArgVectors);

SC_HANDLE hService - указатель службы, возвращённый
функцией CreateService или OpenService. Параметр
dwNumServiceArgs содержит в себе число параметров,
указанных в масиве lpServiceArgVectors. В этом
массиве указываются параметры, которые
будут переданы службе. Учтите, что сервисы
драйверов не используют этот параметр,
поэтому два последних параметра в нашем
случае нужно установить в NULL. Если функция
выполнилась успешно, то она возвращает
ненулевое значение. Функции для остановки
службы нет, но ее можно легко написать с
использованием функции ControlService:

BOOL ControlService(SC_HANDLE hService, DWORD dwControl,
LPSERVICE_STATUS lpServiceStatus);

Параметр dwControl содержит флаги, с помощью
которых вы задаёте, что нужно сделать со
службой. Если вам нужно остановить работу
службы, то можете установить её в
SERVICE_CONTROL_STOP. С помощью этой функции можно и
более удобно останавливать и запускать
службу. Например для паузы работы сервиса,
установите параметр dwControl в SERVICE_CONTROL_PAUSE, а
для продолжения работы в SERVICE_CONTROL_CONTINUE.
Параметр lpServiceStatus - указатель на структуру
SERVICE_STATUS, куда заносится текущий статус
службы. Установите его в NULL, если вам не
важен текущий статус работы службы. Эта
функция возвращает ненулевое значение при
успешном выполнении.

Я перечислил все необходимые функции для
загрузки руткитов (драйверов).Для закрытия
структуры DT SCM используйте функцию
CloseServiceHandle. Она принимает единственный
параметр - DT SCM, т.е. описание, возвращённое
функцией OpenSCManager.

Всех этих функций вполне достаточно для
загрузки и исполнения руткитов. Ниже я
приведу пример использования этих функций.

#define rootkitname "myrootkit" //
задаём имя нашего руткита

BOOL StopRootkit(SC_HANDLE hService) //
Объявляем
функции остановки и старта работы службы

BOOL StartRootkit(SC_HANDLE hService)//
int main()
{
SC_HANDLE hManager,hService; //
описатели
SCM базы и службы

LPVTSTR rootkpath="C:\myrootkit.sys"; //

полный путь к нашему руткиту

hManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); //
создаём
связь с БД SCM

if (hManager) // если всё в порядке
{

hService=CreateService(hManager, rootkitname,rootkitname,SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER, SERVICE_BOOT_START,SERVICE_ERROR_NORMAL, \rootkpath,
NULL,NULL,NULL, NULL,NULL,NULL); // создаём
службу, управляющую нашим руткитом

if (hService) // всё в порядке?
{
StartService(hService,NULL,NULL); //
запускаем
созданную службу, тем самым запуская наш
руткит

}

if (StopRootkit(hService)) // если
остановка прошла успешно,

{
StartRootkit(hService);//
то заново
запускаем её

};
CloseServiceHandle(hManager); //
закрываем
DT SCM (БД SCM).

}
BOOL StopRootkit(SC_HANDLE hService)
{
BOOL ok=true;
if (hService)
{
ok=ControlService(hService,SERVICE_CONROL_STOP,NULL); //
вызываем
функцию ControlService с флагом SERVCE_CONTROL_STOP, тем

if (!ok) // самым останавливая
работу сервиса

{
ok=false;
};
};
return ok;
}

BOOL StartRootkit(SC_HANDLE hService)
{
BOOL ok=true;
if (hService)
{
ok=ControlService(hService,SERVICE_CONTROL_START,NULL); // вызываем
функцию ControlService с флагом SERVCE_CONTROL_START, тем

if (!ok) //с амым запуская службу
{
ok=false;
};
};
return ok;
}

Этот пример просто демонстрирует то, о чём я
писал выше. Вы можете добавить
дополнительные проверки для
предотвращения возможных ошибок.

Советую вам прочитать в книге Свена
Шрайбера ("Недокументированные
возможности Windows 2000") раздел, посвящённый
программированию драйверов. Также
рекомендую цикл статей от Four-F, посвященный
созданию драйверов в Windows NT. Посмотрите
статью от Ms-Rem,"Перехват API функций в Windows NT
(часть 3).Нулевое кольцо". И не проходите
мимо rootkit.com .

Тем, кому интересно внутреннее устойство операционной системы , предлагаю небольшое исследование. Мы попробуем выяснить, что отвечает за порядок загрузки драйверов и сервисов в и можно ли этот порядок изменить.

Прежде всего посмотрим текущий порядок запуска системы с помощью программы LoadOrder от Sysinternals. Программа покажет нам, что и в каком порядке загружается при запуске операционной системы.

Как видно из рисунка, сначала загружаются драйверы устройств, необходимые для запуска системы, а потом различные -сервисы. Поскольку между загрузкой сервисов и загрузкой драйверов есть некоторые различия, рассматривать их будем по отдельности.

Драйверы

В качестве подопытного возьмем драйвер Microsoft ACPI (Advanced Configuration and Power Interface), который отвечает за обнаружение аппаратного обеспечения и управление питанием. Задача ACPI - обеспечить взаимодействие между операционной системой и аппаратным обеспечением, поэтому драйвер ACPI загружается в самом начале.

Программа Loadorder предоставляет довольно ограниченную информацию о порядке загрузки, поэтому за более точными данными идем в реестр. У каждого драйвера и Windows-сервиса есть свой раздел в ветви реестра HKLM\SYSTEM\CurrentControlSet\Services. Названы разделы по имени драйвера\сервиса, соответственно нам нужен раздел ACPI.

За порядок загрузки драйвера отвечают три параметра реестра. Основной параметр Start - определяет тип запуска драйвера. Вот правила, по которым драйверы устанавливают значение своего параметра Start:

Драйверы, которые должны загружаться системным загрузчиком при запуске операционной системы, указывают значение Start равное 0 (запуск при загрузке системы). Пример - драйверы системных шин и драйвер файловой системы, используемый при загрузке системы;
Драйвер, который не требуется непосредственно для загрузки системы, указывает в Start значение, равное 1 (запуск системой). Пример - стандартный драйвер видеокарты (VgaSave);
Драйвер, не обязательный для загрузки системы, устанавливает значение Start равным 2 (автозапуск). Пример - драйвер многосетевого UNC-npoвайдера (Multiple UNC Provider, MUP), поддерживающий UNC-имена удаленных ресурсов (типа \\Computer\Share);
Драйверы, не обязательные для работы операционной системы (например, драйверы сетевых адаптеров), указывают значение Start равным 3 (запуск по требованию).

Также драйверы устройств могут использовать параметры Group и Tag для контроля порядка своей загрузки при запуске системы. Параметр Group драйверы\сервисы используют, чтобы указать группу, к которой они принадлежат, а порядок загрузки групп определяется параметром List, находящимся в разделе HKLM\SYSTEM\ CurrentControlSet\Control\ServiceGroupOrder\.

Кстати, параметр Group указывать не обязательно. Если драйвер\сервис не входит в какую либо группу, то он загружается в самом конце очереди.

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

Посмотрев на порядок загрузки, можно подумать что сначала загружаются драйверы с меньшими значениями Tag, потом - с большими, но это не совсем так. Приоритет значений параметров Tag в рамках группы определяется в разделе HKLM\SYSTEM\CurrentControlSet\Control\GroupOrderList.

Для примера откроем двоичный параметр Boot Bus Extender, который соответствует одноименной группе, к которой относится и драйвер ACPI. Параметр представляет из себя набор двойных слов (по 4 байта каждое). Первое слово (выделено красным) задает общую длину переменной (количество двойных слов), в нашем примере 06. Остальные двойные слова как раз и являются тэгами. Драйверу ACPI соответствует тэг, равный 01 (выделен зеленым).

Приоритетность тега определяется не значением тега, а его положением : чем выше расположен тэг, тем выше его приоритет в группе, и тем выше приоритет драйвера, которому этот тэг соответствует. А поскольку 01 выше остальных тегов, то и драйвер ACPI загружается первым в группе.

Сервисы

Порядок загрузки Windows-сервисов несколько отличается от порядка загрузки драйверов. В качестве примера возьмем сервис aвтоматического обновления (wuauserv). Он не особо критичен для работы системы и поэтому грузится в последнюю очередь.

Опять идем в реестр. Параметры запуска сервиса находятся в разделе HKLM\SYSTEM\CurrentControlSet\Services\wuauserv. Я выделил два основных параметра, отвечающих за порядок загрузки данного сервиса.

Windows-сервисы запускаются диспетчером управления сервисами (Service Control Manager, SCM) в соответствии со значением параметра Start . Параметр этот для сервисов может принимать следующие значения:

Авто запуск (2) - сервис запускается автоматически, сразу после запуска основного SCM-процесса Services.exe;
Запуск по требованию (3) - сервис запускается при необходимости, по требованию какого либо сервиса или программы;
Отключено (4) - сервис отключен и не запускается ни при каких условиях.

Значения 0 (запуск при загрузке системы) и 1 (запуск системой) для сервисов не могут быть указаны, только для драйверов устройств.

Кроме того, начиная с Windows Vista\Server 2008 для сервисов появился еще один режим запуска - отложенный автозапуск. Отвечает за него параметр DelayedAutoStart = 1, который который указывает SCM произвести автоматический старт данного сервиса с задержкой.SCM запускает службы, для которых выбран отложенный запуск, после загрузки сервисов, отмеченных для автозапуска.

Режимом запуска сервисов можно управлять не только из реестра, но и в графическом режиме, из консоли Службы (Services).

Так же как и драйверы, Windows-сервисы могут использовать параметр Group в своем разделе реестра, чтобы указать группу, к которой они принадлежат. Сейчас, для наглядности, возьмем наш сервис wuauserv, находящийся в самом конце списка загрузки. С помощью ключа Group поместим его в группу Event Log, перезагрузимся и посмотрим порядок загрузки в Loadorder. Как видите, порядок изменился и wuauserv поднялся с последнего места, загрузившись сразу после своего одногруппника - службы eventlog. Правда порядок размещения внутри группы изменить уже не получится, т.к. Tag для сервисов не используется.

И еще один параметр, который косвенно влияет на порядок загрузки сервисов - DependOnService . Он указывает, от каких сервисов зависит данный сервис. Соответственно сервис не загружается, пока не будут загружены сервисы, перечисленные в DependOnService.

Зависимости работают следующим образом - если сервисы находятся в одной группе, то зависимый сервис перемещается в конец списка и запускается после сервисов, от которых зависит. Если же группы разные, то сервис просто не запустится, а SCM выдаст ошибку.

Более наглядно это показано в оснастке Службы, где на вкладке Зависимости (Dependency) указаны как сервисы, от которых зависит данный сервис, так и сервисы, зависящие от него.

Понравилась статья? Поделитесь ей
Наверх