– 3 – прекратить запуск операционной системы и выполнить перезагрузку компьютера для запуска последней удачной конфигурации. Если компьютер загружается именно с использованием последней удачной конфигурации, то отображается экран неустранимой ошибки BSOD.
Последняя удачная конфигурация загружает операционную систему на основе ветви реестра HKEY_LOCAL_MACHINE\SYSTEM\ControlSetX, номер которой указан в параметре REG_DWORD-типа LastKnownGood, расположенном В ветви реестра HKEY_LOCAL_MACHINE\SYSTEM\Select.
По умолчанию значение параметра LastKnownGood изменяется после каждого успешного входа пользователя в операционную систему. Однако сторонние службы могут изменить условие, при котором загрузка операционной системы считается удачной, и значение параметра LastKnownGood изменяется.
Для этого им достаточно описать новую программу верификации запуска системы с помощью ветви реестра Windows HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Control\BootVerificationProgram. Также им нужно будет присвоить параметру строкового типа ReportBootOk, расположенному В ветви реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsof t\ Windows NT\CurrentVersion\Winlogon, значение 0. Это необходимо сделать, чтобы операционная система не вызывала функцию Notif yBootConf igStatus при входе пользователя в систему (так как эта функция будет вызываться из новой программы верификации). Функция вызывается перед сохранением последней удачной конфигурации.
• ImagePath – этот параметр строкового типа определяет путь к исполняемому файлу службы. Именно этот файл представляет собой службу и будет запускаться при ее загрузке.
• Start – имеет тип REG_DWORD и определяет, когда именно будет запускаться данная служба. Он может принимать следующие значения.
– 0 – запускать драйвер загрузчиком операционной системы (NTLDR) перед началом этапа инициализации ядра (во время загрузки драйвер будет находиться в памяти).
– 1 – запускать драйвер при инициализации ядра (подсистемой ввода/вывода).
– 2 – запускать службу с помощью диспетчера управления службами (services.ехе) после запуска окна приветствия winlogon.ехе.
– 3 – запускать службу вручную, когда она понадобится какой-нибудь программе.
– 4 – запрещает запуск данной службы.
• DelayedAutoStart – этот параметр REG_DWORD-типа является нововведением операционной системы Windows Vista. Если его значение равно 1, то служба будет запускаться не сразу, а через определенный промежуток времени, чтобы не загружать операционную систему (с задержкой). Как правило, данный параметр используется в том случае, когда значение параметра Start равно 2.
• ServiceSidType – имеет тип REG_DWORD и является нововведением операционной системы Windows Vista. Он определят тип SID, который был присвоен соответствующей службе. Если значение данного параметра равно 1, то служба будет использовать неограниченный SID. А если значение равно 3, то ограниченный.
• Security – данный параметр REG_BINARY-типа содержит дескриптор защиты службы, определяющий права пользователей, которые могут получить доступ к службе.
• Туре – имеет тип REG_DWORD и определяет тип службы. Возможны следующие значения этого параметра.
– 0x1 – драйвер представляет устройство уровня ядра.
– 0x2 – драйвер является драйвером файловой системы уровня ядра.
– 0x4 – драйвер является аргументом для адаптера (данное значение является устаревшим).
– 0x8 – драйвер используется для распознавания файловой системы.
– 0x10 – служба является программой, запускающей свой процесс.
– 0x20 – служба является программой, работающей в общем процессе. Работа нескольких служб в одном процессе позволяет экономить ресурсы компьютера.
– 0x100 – данное значение параметра может добавляться к остальным значениям. Присутствие этого значения говорит о том, что службе разрешено взаимодействовать с Рабочим столом пользователя (то есть она может отображать свои окна). Использование данного значения параметра разрешено только для служб, запущенных от имени системы.
По умолчанию службы, запущенные от имени системы или другой учетной записи, не могут взаимодействовать с Рабочим столом текущего пользователя. Это связано с особенностями работы операционной системы Windows: каждая учетная запись имеет свой собственный Рабочий стол и может взаимодействовать только с ним. При этом отображаться может только один Рабочий стол – текущего пользователя. Поэтому, даже если служба попытается отобразить какое-либо сообщение (за исключением диалогового сообщения, которое служба может отобразить на Рабочем столе текущего пользователя, воспользовавшись специальными параметрами), пользователь этого сообщения не увидит.
Если же разрешить службе, запущенной от имени локальной системы, взаимодействовать с Рабочим столом, то она будет отображать окна не на своем Рабочем столе, а на Рабочем столе текущего пользователя.