Windows Vista. Для профессионалов - Роман Клименко
Шрифт:
Интервал:
Закладка:
Последняя удачная конфигурация загружает операционную систему на основе ветви реестра HKEY_LOCAL_MACHINESYSTEMControlSetX, номер которой указан в параметре REG_DWORD-типа LastKnownGood, расположенном В ветви реестра HKEY_LOCAL_MACHINESYSTEMSelect.
По умолчанию значение параметра LastKnownGood изменяется после каждого успешного входа пользователя в операционную систему. Однако сторонние службы могут изменить условие, при котором загрузка операционной системы считается удачной, и значение параметра LastKnownGood изменяется.
Для этого им достаточно описать новую программу верификации запуска системы с помощью ветви реестра Windows HKEY_LOCAL_MACHINESYSTEM CurrentControlSetControlBootVerificationProgram. Также им нужно будет присвоить параметру строкового типа ReportBootOk, расположенному В ветви реестра HKEY_LOCAL_MACHINESOFTWAREMicrosof t Windows NTCurrentVersionWinlogon, значение 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: каждая учетная запись имеет свой собственный Рабочий стол и может взаимодействовать только с ним. При этом отображаться может только один Рабочий стол – текущего пользователя. Поэтому, даже если служба попытается отобразить какое-либо сообщение (за исключением диалогового сообщения, которое служба может отобразить на Рабочем столе текущего пользователя, воспользовавшись специальными параметрами), пользователь этого сообщения не увидит.
Если же разрешить службе, запущенной от имени локальной системы, взаимодействовать с Рабочим столом, то она будет отображать окна не на своем Рабочем столе, а на Рабочем столе текущего пользователя.
...Примечание
Запретить работу служб в интерактивном режиме можно с помощью параметра типа REG_DWORD NolnteractiveServices, расположенного в ветви HKEY_LOCAL_MACHINE SYSTEMCurrentControlSetControlWindows.
• FailureActions – этот параметр REG_BINARY-типа определяет действия, которые будет выполняться в том случае, если в работе службы произошел сбой. При этом сначала в этом параметре описываются действия для первой неудачной попытки запуска, затем для второй, а потом для всех остальных.
• RequiredPrivileges – имеет тип REG_MULTI_SZ и определяет особые привилегии, которые необходимы для работы данной службы. Он впервые появился в операционной системе Windows Vista с целью повышения общей безопасности компьютера. Теперь службы, которым полностью не нужны системные права, но необходимо выполнять определенные системные операции, могут быть запущены с пониженными правами, однако при этом им будет предоставлено определенное системное право, необходимое для их работы.
...Примечание
Для получения сведений о службах, установленных в операционной системе, можно использовать класс Win32_Service, который принадлежит пространству имен root cimv2 и является производным от классов Win32_BaseService и CIM_Service. Например, он поддерживает следующие свойства: AcceptPause (определяет, разрешено ли приостанавливать работу службы), AcceptStop (указывает, разрешено ли останавливать работу службы), Description (содержит строку описания службы), Desktoplnteract (определяет, может ли служба взаимодействовать с Рабочим столом пользователя). DisplayName (указывает название службы), ErrorControl (определяет поведение операционной системы при возникновении ошибки во время запуска данной службы). Name (ключевое свойство, определяющее имя службы), PathName (указывает путь к исполняемому файлу службы), ProcessID (определяет PID процесса запущенной службы), Started (указывает, запущена ли служба в данный момент), StartName (определяет учетную запись, от имени которой запускается служба).
Класс также поддерживает следующие методы: Create (позволяет создать службу). Delete (позволяет удалить службу), Change (позволяет изменить настройки службы). ChangeStartMode (позволяет изменить режим запуска службы), InterrogateService (обновляет информацию о службе), PauseService (приостанавливает работу службы). ResumeService (продолжает работу службы), StartService (запускает работу службы). StopService (останавливает работу службы), UserControlService (посылает службе код управления).
Если вы знакомы с сервером инструментариев Windows (WMI), то, наверное, уже догадались, что параметр может хранить те же константы привилегий, что и сценарии WMI.
Некоторые параметры реестра , описывающие стандартные настройки службы, также хранятся в подразделе Parameters. К ним можно отнести два параметра: ServiceDll и ServiceDllUnloadOnStop. Первый имеет тип REG_EXPAND_SZ и определяет библиотеку, необходимую для работы данной службы. Второй же параметр имеет тип REGDWORD и определяет, будут ли выгружаться из оперативной памяти компьютера библиотеки, необходимые для работы данной службы, если сама служба была остановлена.
Кроме того, некоторые службы и драйверы хранят в своей ветви реестра подразделы Performance. В данных подразделах описывается библиотека, в которой находятся счетчики производительности соответствующей службы, а также индивидуальные параметры работы этих счетчиков. Например, в данной ветви реестра может находиться параметр REG_DWORD-типа Collect Timeout, определяющий таймаут, в течение которого счетчики должны выполнить задание и ответить на запрос состояния.
Настройки служб svchost
Как вы уже узнали, служба может работать как в собственном процессе, так и в одном из общих процессов. Это позволяет экономить ресурсы компьютера. Хотя при этом появляется другая проблема: если возникнет ошибка в работе одной из служб, то будет завершена работа общего процесса, а вместе с ним и всех служб, которые в нем работали.
Одним из общих процессов для запуска служб является процесс svchost.ехе (например, общим также является процесс services.ехе). Он также называется «универсальным» процессом. Одновременно в операционной системе может существовать несколько запущенных процессов svchost.ехе. При этом каждый из них содержит службы определенного типа (например, типа netsvcs). Данные типы служб указываются как параметр строки запуска службы, расположенной в параметре Image Path ветви службы.
Все службы, исполняемый файл которых является частью файла svchost.ехе, имеют несколько настраиваемых параметров, расположенных в ветви реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion Svchost.