Недокументированные и малоизвестные возможности Windows XP — страница 8 из 28

Ветвь реестра НKEY_LOCAL_MACHINE\SYSTEM

Ветвь реестра HKEY_LOCAL_MACHINE\SYSTEM является наиболее важной для загрузки системы. Если она будет повреждена, то с большой долей вероятности вы уже не сможете войти в систему. Поэтому, наверное, стоит несколько слов сказать и о структуре этой ветви.

Структура ветви большей частью статична. Иными словами, независимо от того, как будет называться новый раздел, добавляемый к содержимому разделов ветви, параметры, которые он должен включать в себя, предопределены программистами Microsoft. Вообще, эта ветвь реестра предназначена для хранения сведений обо всех драйверах, службах и сервисах, установленных в системе. Но, кроме этого, ветвь содержит критически важные сведения настройки самой системы. Пример таких сведений можно найти в последней части книги.

Ветвь реестра HKEY_LOCAL_MACHINE\SYSTEM может включать в себя следующие разделы.

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

■ MountedDevices — указывает настройки монтирования логических дисков вашей системы.

■ Select — определяет ветви ControlSetNNN и способ их использования, но о нем мы поговорим чуть позже.

■ Setup — указывает настройки установки Windows, а также может использоваться программой sysprep для своего запуска при следующей перезагрузке.

■ WPA — содержит сведения об активационных ключах, доступных вашей операционной системе.

Раздел Control Set NNN

Теперь подробнее поговорим о самых важных разделах ветви системного реестра HKEY_LOCAL_MACHINE\SYSTEM. Первыми из них будут разделы формата ControlSetNNN и раздел CurrentControlSet. Об их важности говорит уже то, что, хотя в системе может содержаться несколько разделов формата ControlSetNNN (вместо NNN указывается номер раздела, например ControlSet001, ControlSet002 или ControlSet003), все они хранят практически одинаковую информацию. И это не избыточность. Программисты Microsoft приняли решение специально использовать несколько копий разделов, содержащих критически важную информацию, чтобы в случае повреждения одного из них система могла загрузиться с помощью настроек из другого раздела.

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

Раздел CurrentControlSet на самом деле не является физически существующим в реестре, его содержимое — это лишь ссылка на тот раздел ControlSetNNN, который был загружен в текущий момент.

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

Раздел Select

Но как же система узнает, какой из разделов ControlSetNNN необходимо использовать при обычной загрузке, какой нужно применять при загрузке последней удачной конфигурации, а какой вообще является испорченным? Именно для этих целей и предназначен раздел Select. Он содержит параметры DWORD-типа, каждый из которых определяет номер раздела ControlSetNNN и ту метку, которая была ему присвоена во время последнего удачного входа в систему. Рассмотрим назначение каждого из параметров, описанных в разделе Select.

■ Default — определяет, какая копия раздела ControlSetNNN будет загружена при обычной загрузке системы. Например, если значение данного параметра равно 2, то при обычной загрузке системы раздел CurrentControlSet будет ссылкой на содержимое раздела ControlSet002.

■ Current — указывает номер текущей копии раздела ControlSetNNN, который использовался для загрузки системы и на который ссылается раздел CurrentControlSet.

■ LastKnownGood — определяет номер копии раздела ControlSetNNN, которая будет использоваться для загрузки и построения содержимого раздела CurrentControlSet при использовании команды меню альтернативной загрузки Загрузка последней удачной конфигурации.

■ Failed — указывает раздел ControlSetNNN, при предыдущей загрузке которого произошел какой-то серьезный сбой и загрузка с его помощью была прервана.

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

После рассмотрения назначения разделов формата ControlSetNNN вы знаете, что они предназначены для хранения настроек запускаемых системой служб. Но как эти настройки хранятся в реестре? Именно этому вопросу и посвящен данный раздел.

Все настройки запуска служб хранятся в ветви реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. Она содержит список разделов, каждый из которых определяет описания одной службы или сервиса. Названия данных разделов, в принципе, не имеют значения (но если для службы не существует параметра DisplayName, то для ее идентификации будет использоваться название раздела, в котором она описывается). Значение имеют те параметры, которые описаны в соответствующем разделе. К таким параметрам можно отнести приведенные ниже.

■ Group — параметр имеет тип REG_SZ и определяет группу, к которой относится служба. Именно от группы зависит, в какой момент будет запущена служба — сначала запускаются все службы одной группы, потом все службы другой и т.д. Саму же последовательность, в которой запускаются группы служб, можно просмотреть в REG_MULTI_SZ-параметре List, расположенном в ветви реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder.

■ DependOnGroup — этот параметр REG_MULTI_SZ-типа определяет группы, которые должны быть запущены перед запуском данной службы. В контексте оснастки services.msc, которая описывает все службы, установленные на компьютере, данный параметр определяет содержание вкладки Зависимости диалога Свойства для данной службы.

■ DependOnService — параметр REG_MULTI_SZ-типа, определяет сервисы, которые должны быть запущены перед запуском данной службы. Значения этого параметра отображаются на вкладке Зависимости диалога Свойства, вызываемого двойным щелчком левой кнопкой мыши на строке, определяющей данную службу в оснастке services.msc.

■ DisplayName — этот параметр строкового типа определяет строку названия службы, которая как раз и будет идентифицировать службу в оснастке services.msc (данная строка будет отображаться в поле Имя оснастки services.msc).

■ Description — параметр строкового типа, определяет строку описания для соответствующей службы. Строка будет отображаться в поле Описание диалога Свойства для данной службы.

■ ObjectName — этот параметр строкового типа определяет учетную запись, с правами которой будет запускаться служба. Если его значение равно LocalSystem, то вход будет выполняться с правами данной учетной записи (эта запись пришла на смену записи System, определяющей права системы, и содержит меньше прав, чем сама учетная запись System). Если же значение этого параметра равно NT Authority\NetworkService, то вход будет выполнен от имени сетевой службы (аналогично учетной записи LocalSystem, данная учетная запись имеет меньше прав, чем учетная запись System). Если же вам необходимо предоставить службе вход от имени учетной записи определенного пользователя данного компьютера, то параметру ObjectName в качестве значения нужно присвоить строку формата .\логин пользователя.

■ ErrorControl — параметр DWORD-типа, определяет поведение системы при возникновении ошибок в работе службы и может принимать такие значения:

 • 0 — игнорировать ошибку;

 • 1 — предупреждать пользователя об ошибке;

 • 2 — перезагрузить компьютер.

■ ImagePath — этот параметр строкового типа определяет путь к файлу службы, который и будет запускаться системой. В оснастке services.msc параметр определяет содержимое поля Исполняемый файл диалога Свойства для соответствующей службы (это поле позволяет лишь просмотреть путь к файлу службы, но не отредактировать его).

■ Start — параметр DWORD-типа, определяет момент загрузки системы, в который будет запущена данная служба. Он может принимать следующие значения:

 • 0 — служба будет запускаться загрузчиком операционной системы перед началом этапа инициализации ядра;

 • 1 — данная служба будет запускаться при инициализации ядра (подсистемой ввода/вывода);

 • 2 — служба будет запускаться диспетчером сервисов (smss.exe) при входе пользователя в систему;

 • 3 — данная служба запускается вручную в тот момент, когда она понадобится какой-нибудь программе;

 • 4 — служба не будет запускаться никогда.

■ Type — этот параметр DWORD-типа указывает на то, к какому типу относится служба, и может принимать следующие значения:

 • 1 — служба определяет устройства уровня ядра;

 • 2 — служба определяет драйвер файловой системы;

 • 4 — служба является аргументом для адаптера;

 • 8 — служба относится к службам файловой системы;

 • 10 — служба является программой, запускающей свой процесс;

 • 20 — служба является программой, запускающей общий процесс;

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

Для примера попробуем зарегистрировать в системе свою собственную службу. Для этого достаточно только создать свой раздел в ветви HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services, а в этом разделе создать такие параметры, как ImagePath, DisplayName, Description, Group. Результат можно видеть на рис. 8.1.

Рис. 8.1. Создание своей службы

Потенциально опасные ветви и параметры реестра

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

■ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MiniNT — раздел не предназначен для операционной системы Windows XP, поэтому если он будет присутствовать в системе, то при каждой загрузке система будет выводить сообщение о нехватке размера файла подкачки pagefile.sys и создавать новый файл.

■ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{e17d4fc0-5564-11d1-83f2-00a0c90dc849} — об этом разделе уже упоминалось — если он окажется удаленным, то диалоговое окно Поиск работать не будет.

■ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{1f4de370-d627-11d1-ba4f-00a0c91eedba} — это еще один раздел, без которого не будет работать диалоговое окно Поиск.

■ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon — эта ветвь реестра может включать в себя множество параметров, за содержимым которых необходимо следить. Например, к ним можно отнести следующие параметры строкового типа.

 • System — определяет программы, которые будут запускаться с правами системы процессом WINLOGON.EXE при инициализации. Программы пишутся через запятую, то есть параметр может содержать вызов сразу нескольких программ. По умолчанию он ничему не равен.

 • Userinit — указывает программы, которые будут запускаться с правами пользователя при его регистрации процессом WINLOGON.EXE. Программы пишутся через запятую, это опять-таки означает, что в данной ветви могут находиться сразу несколько вызовов программ. По умолчанию значение данного параметра равно %systemroot%\system32\userinit.exe.

 • VmApplet — определяет программы, которые будут запускаться для настройки параметров виртуальной памяти процессом WINLOGON.EXE. Программы пишутся через запятую. По умолчанию значение данного параметра равно rundll32 shell32, Control_RunDLL "sysdm.cpl".

 • Shell — указывает файлы оболочки, которые будут запускаться при входе пользователя. Он как раз и определяет, что вы используете стандартную оболочку Windows explorer.exe — именно эта строка является значением параметра Shell по умолчанию. Но если вы измените значение этого параметра, например, на explorer.exe, notepad.exe, то наряду с оболочкой Windows при вашем входе в систему будет запускаться и Блокнот. Этот параметр может находиться как в корневом разделе HKEY_CURRENT_USER, так и в разделе HKEY_LOCAL_MACHINE.

 • GinaDLL — определяет путь к библиотеке msgina.dll, которая запускается вместе с системой по умолчанию и необходима для взаимодействия с оболочкой Windows. Если изменить значение этого параметра на вызов какой-нибудь программы, а не библиотеки, то при инициализации процесса WINLOGON.EXE будет выдано сообщение об ошибке и вы не сможете войти в систему.

■ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Windows — может содержать несколько потенциально опасных параметров, среди которых можно выделить следующие параметры строкового типа.

 • Run — определяет программы, которые будут запускаться с правами пользователя при его входе. Как и рассмотренные выше параметры, он может вызывать сразу несколько программ — в этом случае они пишутся через запятую. Параметр может находиться как в корневом разделе реестра HKEY_CURRENT_USER, так и в корневом разделе HKEY_LOCAL_MACHINE.

 • Load — указывает программы, которые будут запускаться с правами системы при входе любого пользователя. Как и рассмотренные выше параметры, он может вызывать сразу несколько программ — в этом случае они пишутся через запятую.

 • AppInit_DLLs — определяет библиотеки, необходимые для совместимости с каким-нибудь оборудованием или программой. Все описанные в данном параметре библиотеки будут запускаться перед запуском любой программы.

■ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects — определяет все CLSID-номера ActiveX-объектов (в виде разделов, названных в честь CLSID-номера ActiveX-объекта), которые будут запускаться при каждом запуске браузера Internet Explorer.

■ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager — содержит REG_MULTI_SZ-параметр BootExecute, его значением являются команды, которые будут запускаться при каждой перезагрузке компьютера. Он используется системой для запуска таких системных программ работы с дисками, как автопроверка диска (значение этого параметра autocheck autochk *) или преобразование файловой системы диска FAT в NTFS (значение данного параметра autoconv \DosDevice\x: /FS:NTFS).

■ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options — используется для возможности определения программ, при выполнении которых происходит утечка памяти. Но можно воспользоваться этой ветвью и для других целей. Например, если создать в ней раздел explorer.exe, а в нем создать DWORD-параметр ShutdownFlags и присвоить ему значение 3, то после выгрузки оболочки Windows существует вероятность, хотя и малая, что вы не сможете ее загрузить. Система может не дать вам этого сделать. Но даже если вы и сможете загрузить оболочку, то, скорее всего, увеличится количество ошибок неправильной адресации к памяти, выдаваемых различными программами.

■ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\option — определяет, в каком режиме будет загружаться операционная система — обычном или безопасном. Именно поэтому возможна такая шутка — создайте в этой ветви реестра DWORD-параметр OptionValue и присвойте ему значение, равное 1. Теперь вы всегда будете загружаться в режиме, в чем-то подобном безопасному, — будет загружаться лишь минимальный набор сервисов, но драйверы устройств, таких как видеокарта, будут использоваться обычные, устанавливаемые вместе с устройством (а не стандартные, как при полноценном безопасном режиме). При этом, даже если вы являетесь администратором компьютера, вам будет запрещено запускать такие службы, как, например, Windows Audio, которые нельзя запускать в безопасном режиме. Раздел option создается только в безопасном режиме.

■ HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints\«значок диск» и HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\«значок диск» — хранят настройки контекстного меню, значков дисков, а также описание файла autorun.inf, применявшегося ранее для запуска содержимого компакт-диска. В практике автора книги был такой случай, когда записи данных ветвей реестра постоянно приводили к отказу в доступе к приводу DVD. Другими словами, при попытке открытия содержимого диска, установленного в приводе DVD, отображался отказ в доступе к диску. При этом проблема решалась именно удалением раздела, названного в честь буквы диска, доступк которому был отклонен (решалась до следующей попытки доступа к приводу). Поэтому, если у вас возникли подобные проблемы, просто попробуйте удалить соответствующие ветви реестра, а потом установить для них только доступ на чтение.

Часть 3