Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Секреты Windows: статьи о реестре, rundll32.exe, программах


Глава 5. Стандартные службы Windows Vista. Основные сведения о службах
Дата: 16 апреля 2009, четверг

Вы написали интересную статью на околокомпьютерную тематику? Мы можем опубликовать ее на своем сайте (http://www.onestyle.com.ua). Естественно, мы сохраним ваши авторские права, и укажем при публикации все реквизиты, которые вы посчитаете нужным указать: от вашего ника и имени, до адреса вашего сайта и места вашего жительства.

Пишите нам: onestyle СОБАЧКА list ТОЧКА ru

В конец записи

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

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

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

Программа управления службой (SCP) предназначена для запуска, остановки и настройки службы (для взаимодействия с SCM). Каждая служба может поставляться со своей собственной программой управления службой, однако чаще всего службы используют стандартный SCP операционной системы Windows. Например, SCP является оснастка операционной системы services.msc или программа командной строки sc.exe.

Диспетчер управления службами SCM реализован в виде файла services.exe и содержит в себе сведения обо всех зарегистрированных в операционной системе службах. Он запускается процессом Winlogon.exe еще до запуска графического интерфейса (диалога входа в систему).

Диспетчер SCM взаимодействует с SCP при помощи именованного канала \Pipe\Ntsvcs. Также SCM, при запуске очередной службы, создает канал \Pipe\Net\NtControlPipeX, после чего ждет подключения запускаемой службы к этому каналу.

Если по истечении определенного интервала (по умолчанию 30 секунд) служба так и не подключилась к каналу, SCM завершает работу службы. Интервал ожидания подключения службы к каналу определяется параметром REG_DWORD типа ServicesPipeTimeout, расположенным в ветви реестра HKLM\SYSTEM\CurrentControlSet\Control.

Если же служба подключилась к каналу, SCM передает по каналу команду окончательного запуска службы.

Сведения обо всех службах и драйверах, установленных в системе, хранятся в подразделах ветви реестра HKLM\SYSTEM\CurrentControlSet\Services. Данная ветвь реестра является постоянным представлением базы служб SCM. Каждая установленная служба или драйвер (независимо от того, работает ли он в данный момент или нет) имеет свой собственный подраздел в данной ветви реестра. Данный подраздел создается в том момент, когда служба регистрируется при помощи функции CREATESERVICE из библиотеки advapi32.dll.

Параметры, описывающие службы

Подраздел службы хранит в себе общие сведения о службе, например, такие как имя и описание службы, ее исполняемый файл, способ запуска и т.д., а также настройки службы, если такие имеются. Общие сведения о работе служб хранятся в одних и тех же параметрах (с одинаковыми названиями), тогда как настройки службы могут описываться любыми параметрами, названия которых придумывают сами создатели службы. Кроме того, общие сведения о службах всегда располагаются непосредственно в ветви реестра HKLM\SYSTEM\CurrentControlSet\Services\«название службы», тогда как параметры настройки службы могут находиться в любом подразделе данной ветви реестра (но чаще всего находятся в подразделе Parameters).

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

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

Сама последовательность запуска групп служб описана в параметре типа REG_MULTI_SZ List, расположенном в ветви реестра HKLM\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder.

Просмотреть список групп, зарегистрированных в операционной системе Windows Vista, можно при помощи класса Win32_LoadOrderGroup, принадлежащего пространству имен \\Root\Cimv2. Экземпляры данного класса описывают отдельную группу и поддерживают следующие свойства: DriverEnabled (определяет, могут ли в данную группу входить драйверы), GroupOrder (определяет очередность загрузки элементов данной группы), Name (ключевое свойство, определяющее название группы).

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

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

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

DisplayName Данный параметр строкового типа определяет название службы, используемое для отображения службы в оснастке services.msc.

Description Данный параметр строкового типа определяет описание службы, используемое для отображения строки описания службы в оснастке services.msc.

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

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

    Данная учетная запись хранит свои настройки в ветви реестра HKEY_USERS\.DEFAULT. Профиль же данной учетной записи содержится в каталоге %systemdrive%\Users\Default.

  • NT Authority\NetworkService. Служба запускается с правами пользователя, которому разрешен доступ к сети.

    Данная учетная запись хранит свои настройки в ветви реестра HKEY_USERS\S-1-5-20. Профиль же данной учетной записи содержится в каталоге %systemroot%\ServiceProfiles\NetworkService.

  • NT AUTHORITY\LocalService. Служба запускается с правами локального пользователя, который может взаимодействовать с сетью только при помощи нулевых сеансов (в остальном же данная учетная запись аналогична учетной записи NetworkService).

    Данная учетная запись хранит свои настройки в ветви реестра HKEY_USERS\S-1-5-19. Профиль же данной учетной записи содержится в каталоге %systemroot%\ServiceProfiles\LocalService.

  • .\«логин пользователя». Служба запускается с правами данного пользователя.

ErrorControl Данный параметр типа REG_DWORD определяет поведение системы при возникновении ошибок во время запуска данной службы. Данный параметр может принимать следующие значения.

  • 0 — диспетчер ввода-вывода игнорирует возникшую ошибку, и загрузка операционной системы продолжается.
  • 1 — предупредить пользователя о возникшей ошибке и продолжить запуск операционной системы.
  • 2 — прекратить запуск операционной системы и выполнить перезагрузку компьютера для запуска последней удачной конфигурации. Если компьютер загружается именно с использованием последней удачной конфигурации, ошибка игнорируется.
  • 3 — прекратить запуск операционной системы и выполнить перезагрузку компьютера для запуска последней удачной конфигурации. Если компьютер загружается именно с использованием последней удачной конфигурации, отображается экран неустранимой ошибки BSOD.

Последняя удачная конфигурация загружает операционную систему на основе ветви реестра HKLM\SYSTEM\ControlSetX, номер которой указан в параметре REG_DWORD типа LastKnownGood, расположенном в ветви реестра HKLM\SYSTEM\Select.

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

Для этого им достаточно описать новую программу верификации запуска системы при помощи ветви реестра HKLM\SYSTEM\CurrentControlSet\Control\BootVerificationProgram. Также им нужно будет присвоить параметру строкового типа ReportBootOk, расположенному в ветви реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon, значение 0. Это необходимо сделать, чтобы операционная система не вызывала функцию NotifyBootConfigStatus при входе пользователя в систему (так как эта функция будет вызываться из новой программы верификации). Данная функция вызывается перед сохранением последней удачной конфигурации.

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

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

  • 0 — запускать драйвер загрузчиком операционной системы (NTLDR) перед началом этапа инициализации ядра (во время загрузки драйвер будет находиться в памяти);
  • 1 — запускать драйвер при инициализации ядра (подсистемой ввода/вывода);
  • 2 — запускать службу с помощью диспетчера управления сервисами (services.exe) после запуска диалога приветствия winlogon.exe;
  • 3 — запускать службу вручную, когда она понадобится какой-нибудь программе;
  • 4 — запрещает запуск данной службы.

DelayedAutoStart Данный параметр REG_DWORD типа является нововведением операционной системы Windows Vista. Если его значение равно 1, тогда служба будет запускаться не сразу, а через определенный промежуток времени, чтобы не загружать операционную систему (с задержкой). Как правило, данный параметр используется в том случае, когда значение параметра start равно 2.

ServiceSidType Данный параметр REG_DWORD типа является нововведением операционной системы Windows Vista. Он определят тип SID, который был присвоен соответсвующей службе. Если значение данного параметра равно 1, тогда служба будет использовать неограниченный SID. А если значение данного параметра равно 3, тогда ограниченный.

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

Type Данный параметр типа REG_DWORD определяет тип службы. Возможны следующие значения этого параметра.

  • 0х1 — драйвер представляет устройство уровня ядра.
  • 0х2 — драйвер является драйвером файловой системы уровня ядра.
  • 0х4 — драйвер является аргументом для адаптера (данное значение является устаревшим).
  • 0х8 — драйвер используется для распознавания файловой системы.
  • 0х10 — служба является программой, запускающей свой процесс.
  • 0х20 — служба является программой, работающей в общем процессе. Работа нескольких служб в одном процессе позволяет экономить ресурсы компьютера.
  • 0х100 — данное значение параметра может добавляться к остальным значениям. Присутствие этого значения говорит о том, что службе разрешено взаимодействовать с рабочим столом пользователя (то есть, она может отображать свои окна и диалоги). Использование данного значения параметра разрешено только для служб, запущенных от имени системы.

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

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

Запретить работу служб в интерактивном режиме можно при помощи параметра REG_DWORD типа NoInteractiveServices, расположенного в ветви реестра HKLM\SYSTEM\CurrentControlSet\Control\Windows.

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

RequiredPrivileges Данный параметр типа REG_MULTI_SZ определяет особые привилегии, которые необходимы для работы данной службы. Этот параметр впервые появился в операционной системе Windows Vista с целью повышения общей безопасности компьютера. Теперь службы, которым полностью не нужны системные права, но необходимо выполнять определенные системные операции, могут быть запущены с пониженными правами, но при этом им будет предоставлено определенное системное право, которое необходимо для их работы.

Возможны следующие значения этого параметра.

Для получения сведений о службах, установленных в операционной системе, можно использовать класс Win32_Service, который принадлежит пространству имен root\cimv2, и является производным от классов Win32_BaseService и CIM_Service. Например, он поддерживает следующие свойства: AcceptPause (определяет, разрешено ли приостанавливать работу службы), AcceptStop (определяет, разрешено ли останавливать работу службы), Description (содержит строку описания службы), DesktopInteract (определяет, может ли служба взаимодейтвовать с рабочим столом пользователя), 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 и определяет библиотеку, необходимую для работы данной службы. Второй же параметр имеет тип REG_DWORD и определяет, будут ли выгружаться из оперативной памяти компьютера библиотеки, необходимые для работы данной службы, если сама служба была остановлена.

Кроме того, некоторые службы и драйверы содержат в своей ветви реестра подразделы Performance. В данных подразделах описывается библиотека, в которой находятся счетчики производительности соответсвующей службы, а также индивидуальные параметры работы этих счетчиков. Например, в данной ветви реестра может находиться параметр REG_DWORD типа Collect Timeout, который определяет таймаут, в течение которого счетчики должны выполнить задание и ответить на запрос ссотояния.

Настройки служб svchost

Как мы уже узнали, служба может работать как в собственном процессе, так и в одном из общих процессов. Это позволяет экономить ресурсы компьютера. Хотя при этом возникается другая проблема — если возникнет ошибка в работе одной из служб, будет завершена работа общего процесса, а вместе с ним, и всех служб, которые в нем работали.

Одним из общих процессов для запуска служб является процесс svchost.exe (например, также общим процессом является процесс services.exe). Данный процесс также называется «универсальным» процессом. Одновременно в операционной системе может существовать несколько запущенных процессов svchost.exe. При этом каждый из процессов содержит в себе службы определенного типа (например, типа netsvcs). Данные типы служб указываются как опция строки запуска службы, расположенной в параметре ImagePath ветви службы.

Все службы, исполняемый файл которых является частью файла svchost.exe, имеют несколько настраиваемых параметров, расположенных в ветви реестра HKLM\Software\Microsoft\Windows NT\CurrentVersion\Svchost.

Данная ветвь реестра содержит в себе набор параметров строкового типа, значения которых определяют службы, исполняемый файл которых является частью файла svchost.exe. Название же этих параметров определяет название дочернего подраздела ветви реестра HKLM\Software\Microsoft\Windows NT\CurrentVersion\Svchost, в котором расположены настройки для этих служб. Также название этих параметров соответствуют записи SCM, под которой эти службы исполняются.

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

Основы работы драйверов

Как вы знаете, в ветви реестра HKLM\SYSTEM\CurrentControlSet\Services описываются не только установленные в операционной системе службы, но и драйверы. При этом драйверы описываются при помощи тех же основных параметров реестра, что и службы. Хотя значения, присваемые данным параметрам, могут отличаться. Так, например, параметр Type для драйверов может использовать только значения 1, 2 и 4. А параметр Start — значения 0 и 1.

Изменить тип запуска драйверов можно не только при помощи реестра, но и при помощи оснастки DEVICE MANAGER (devmgmt.msc). Для этого вам нужно сначала включить отображение скрытых устройств (в меню VIEW установить флажок SHOW HIDDEN DEVICE), после чего перейти к разделу дерева оснастки Non-Plug and Play Drivers. Данный раздел содержит в себе список всех установленных в операционной системе драйверов, которые не поддерживают технологию Pug-n-Play. При этом если вы отобразите диалог PROPERTIES (при помощи одноименной команды контекстного меню) любого из этих драйверов, и перейдете на вкладку DRIVER, то в поле STARTUP сможете изменить тип запуска соответствующего драйвера.

По умолчанию оснастка Device Manager не отображает сведения о не существующих в данный момент устройствах или драйверах (например, если драйвер устройства был установлен, а потом устройство было извлечено из компьютера). Если же вам нужно изменить параметры именно такого устройства, тогда достаточно создать системную переменную DEVMGR_SHOW_NONPRESENT_DEVICES и присвоить ей значение 1. После этого вы сможете увидеть не существующие в данный момент устройства, если в меню View установите флажок Show hidden device.

Для создания данной системной переменной можно воспользоваться либо реестром (создать параметр строкового типа DEVMGR_SHOW_NONPRESENT_DEVICES в ветви HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment), либо диалогом Environment Variables (отображается после нажатия на кнопку Environment Variables…, расположенную на вкладке Advanced диалога System Properties).

Также список системных драйверов и их описание, а также драйверов, имеющих цифровую подпись, можно просмотреть при помощи программы msinfo32.exe. Для этого достаточно запустить данную программу и перейти к разделам Software Environment/System Drivers и Software Environment/Signed Drivers.

Список минифильтров, установленных в операционной системе, можно просмотреть при помощи программы командной строки fltmc.exe. Если в поле напротив записи драйвера указано значение <ltLegacy>, тогда это фильтр. Иначе — минифильтр. При этом в поле Num Instances указано количество экземпляров данного минифильтра.

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

Минифильтр представляет собой драйвер, разработанный для модели диспетчера фильтров.

Продолжение следует

Рейтинг: 0 
Оцените: 1 2 3 4 5
moemesto.ru bobrdobr.ru - добавить в социальные закладки
В начало записи
Оригинал статьи: http://www.onestyle.com.ua/txt.php?u=489

В избранное