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

Секреты Windows: статьи о реестре, rundll32.exe, программах Недокументированные возможности Windows XP.Реестр. Часть 13


Другие наши рассылки:
  • Новости IT-мира: Ежедневно ссылки на новые новости и статьи популярных компьютерных сайтов.
  • Рецензии на новые книги: Описание новых книг о компьютерах, дизайне, бухгалтерии, психологии и др. направлениях мысли человечества.
  • Новости нашего сайта: Ежедневно ссылки на новое на нашем сайте: от ссылок на статьи до ссылок на новые/обновленные записи баз данных.

Продолжение, начало в выпусках: 21 23 26 28 30 32 34 36 38 40 42 44

Книга "Недокументированные возможности Windows XP. Библиотека пользователя", Глава 2. Реестр Windows XP. Часть 11. HKEY_LOCAL_MACHINE\SYSTEM

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

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

Ветвь реестра HKEY_LOCAL_MACHINE\SYSTEM может содержать в себе следующие подразделы:

  • CURRENTCONTROLSET и подразделы CONTROLSETNNN. Данные подразделы как раз и определяют все сведения о сервисах и службах, установленных в вашей системе, способ их запуска, последовательность их запуска, а также различные настройки сетевых компонентов и самой операционной системы;
  • MountedDevices. Данный подраздел определяет настройки монтирования логических дисков вашей системы;
  • Select. Данный подраздел определяет ветви CONTROLSETNNN и способ их использования, но о нем мы погорим чуть позже;
  • Setup. Данный подраздел определяет настройки установки Windows, а также может использоваться программой sysprep для своего запуска при следующей перезагрузке;
  • WPA. Данный подраздел содержит в себе сведения об активационных ключах, доступных на вашей операционной системе;
ControlSetNNN

А теперь давайте подробней поговорим о самых важных подразделах ветви реестра 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 вы будете загружаться при выборе команды ЗАГРУЗКА ПОСЛЕДНЕЙ УДАЧНОЙ КОНФИГУРАЦИИ. После завершения работы компьютера все занесенные вами в текущий сеанс работы сведения помещаются в используемый при загрузке системы раздел 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 — если данная битовая маска присутствует в параметре TYPE, тогда система будет разрешать соответствующей службе взаимодействие с рабочим столом (иначе служба не сможет вывести диалоговое окно, окно сообщения или свое окно);

И для примера давайте попробуем зарегистрировать в системе свою собственную службу. Для этого достаточно только создать свой подраздел в ветви HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\SERVICES, а в этом подразделе создать такие параметры, как IMAGEPATH, DISPLAYNAME, DESCRIPTION, GROUP... Что можно видеть на рисунке 2.33.

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

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

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

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{1f4de370-d627-11d1-ba4f-00a0c91eedba} Подраздел {1F4DE370-D627-11D1-BA4F-00A0C91EEDBA} является еще одним подразделом, без которого не будет работать диалоговое окно ПОИСК.

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

  • SYSTEM — данный параметр определяет программы, которые будут запускаться с правами системы процессом Winlogon при инициализации. Программы пишутся через запятую, то есть, данный параметр может содержать вызов сразу нескольких программ. По умолчанию этот параметр ничему не равен.
  • USERINIT — данный параметр определяет программы, которые будут запускаться с правами пользователя при его регистрации процессом Winlogon. Программы пишутся через запятую, что опять такие говорит о том, что в данной ветви могут находиться сразу несколько вызовов программ. По умолчанию значение данного параметра равно %systemroot%\system32\userinit.exe.
  • VMAPPLET — данный параметр определяет программы, которые будут запускаться для настройки параметров виртуальной памяти процессом Winlogon. Программы пишутся через запятую. По умолчанию значение данного параметра равно 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 будет выдано сообщение об ошибке, и вы не сможете войти в систему.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\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\Windows NT\CurrentVersion\Image File Execution Options Данная ветвь реестра используется для возможности определения программ, при выполнении которых происходит утечка памяти. Но можно воспользоваться этой ветвью и для других целей. Например, если создать в приведенной ветви реестра подраздел explorer.exe, а в нем создать параметр DWORD-типа SHUTDOWNFLAGS и присвоить ему значение 3, тогда после выгрузки оболочки Windows, существует вероятность, хотя и малая, что вы не сможете ее загрузить. Система может не дать вам этого сделать. Но даже если вы и сможете загрузить оболочку, то скорее всего увеличится количество ошибок неправильной адресации к памяти, выдаваемых различными программами.

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

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

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

Оригинал статьи: http://www.onestyle.com.ua/txt.php?u=136

В избранное