Windows Vista — о новых возможностях и недостатках, №4

 | 15.22

Мой Компьютер, №4, 21.01.2008

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

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

  • Добавились новые файлы кустов
  • Программа reg.exe поддерживает новые возможности
  • Программа regini.exe теперь входит в стандартную поставку операционной системы.

 

Что такое реестр

Реестр любой операционной системы семейства Windows представляет собой базу данных, которая хранит в себе настройки работы операционной системы и установленных вами программ.

Именно для хранения настроек и предназначен реестр. Ведь вы, наверное, замечали, что каждая программа предлагает различные диалоги, в которых можно настроить параметры ее работы. Кроме того, почти каждая программа содержит внутренние настройки, которые нельзя изменить при помощи диалогов, но которые, тем не менее, влияют на работу программы. Как же программе хранить такие настройки?

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

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

Так появился реестр операционной системы Windows Vista.

Корневые разделы и ветви реестра

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

  • Параметр реестра. Параметр реестра представляет собой значение определенного типа, которое используется конкретной программой или операционной системой для определения того, как она должна работать. Если говорить образно, параметр можно сравнить с файлом в файловой системе компьютера.
  • Подраздел реестра. Каждый подраздел реестра можно сравнить с папкой в файловой системе компьютера. Он может хранить в себе параметры реестра и другие подразделы.
  • Ветвь реестра. А ветвь реестра представляет собой путь к определенной части реестра, который состоит из последовательности подразделов, которые нужно открыть, чтобы добраться до конечного подраздела в ветви.

Ветвь реестра имеет следующий формат: корневой раздел реестра подраздел подраздел … конечный подраздел. Например, если сказано, что определенный параметр находится в ветви реестра HKCUControl PanelDesktop (см. рис.), значит, он находится в подразделе Desktop, который находится в подразделе Control Panel. А вот подраздел Control Panel находится в корневом разделе HKEY_CURRENT_USER.

Возникает законный вопрос: а что такое корневой раздел? Корневой раздел — это всего-навсего подраздел реестра, выше которого ничего нет. Также его можно назвать системным подразделом, удалить или переименовать который нельзя, и в котором содержатся другие подразделы реестра. В операционной системе Windows Vista реестр состоит из пяти корневых разделов.

HKEY_CLASSES_ROOT

Данный корневой раздел содержит в себе всю информацию о зарегистрированных в операционной системе типах расширений файлов, а также о содержимом их контекстного меню, содержимом диалога Свойства, значке файла и многом другом. Кроме того, содержимое данного корневого раздела хранит описание всех зарегистрированных в операционной системе ActiveX-объектов.

Фактически, корневой раздел HKEY_CLASSES_ROOT не существует в реестре. Данный корневой раздел является ссылкой на содержимое двух других ветвей реестра: ветвей HKLMSOFTWAREClasses и HKCUSoftwareClasses. При этом данные, содержащиеся в ветви реестра HKCUSoftwareClasses, заменяют собой данные из ветви реестра HKLMSOFTWAREClasses.

Нет никакой разницы, содержимое какой ветви реестра редактировать. Любые изменения, которые будут внесены в ветви реестра HKLMSOFTWAREClasses или HKCUSoftwareClasses, будут сразу же отображаться и в корневом разделе HKEY_CLASSES_ROOT. Если же вы изменяете содержимое корневого раздела HKEY_CLASSES_ROOT, то фактически вы изменяете содержимое ветви реестра HKLMSOFTWAREClasses.

Содержимое корневого раздела HKEY_CLASSES_ROOT доступно для редактирования только операционной системе и администратору (администратору доступны не все ветви реестра). Однако администратор может самостоятельно изменить разрешения для конкретной ветви реестра.

HKEY_CURRENT_USER

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

Как и корневой раздел HKEY_CLASSES_ROOT, данный корневой раздел физически отсутствует в реестре. Он является ссылкой на ветвь реестра HKEY_USERS«SID учетной записи пользователя».

Практически все содержимое данного корневого раздела могут редактировать не только администраторы, но и пользователь, которому принадлежит профиль. Исключение составляют только настройки ограничений в ветвях реестра, используемых групповыми политиками (ветви реестра HKCUSoftwareMicrosoftWindowsCurrentVersionPolicies и HKCUSoftwarePolicies), а также ветвь реестра HKCUSoftwareMicrosoftProtected Storage System Provider, в которой почтовый клиент Windows Mail хранит пароли своих пользователей. Эти ветви реестра доступны только администраторам.

HKEY_LOCAL_MACHINE

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

Многие параметры, которые хранятся в подразделах ветви реестра HKLMSOFTWAREMicrosoft данного корневого раздела, могут дублироваться в ветви HKCUSOFTWAREMicrosoft. Как правило, в этих случаях операционная система будет использовать значения из корневого раздела HKEY_CURRENT_USER, так как они относятся к настройкам конкретного пользователя.

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

HKEY_USERS

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

Данный корневой раздел разрешено редактировать только администратору и учетной записи локальной системы.

HKEY_CURRENT_CONFIG

Как и корневые разделы HKEY_CLASSES_ROOT и HKEY_CURRENT_USER, данный корневой раздел физически не существует в реестре. Он является ссылкой на ветвь реестра HKLMSYSTEMCurrentControlSetHardware ProfilesCurrent.

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

Корневые разделы HKCU, HKU, HKLM

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

  • HKCU является сокращением от названия корневого раздела HKEY_CURRENT_USER;
  • HKU является сокращением от названия корневого раздела HKEY_USER;
  • HKLM является сокращением от названия корневого раздела HKEY_LOCAL_MACHINE.

Типы параметров реестра

В зависимости от информации, которую можно хранить в параметре реестра, он может быть нескольких типов.

Независимо от типа параметра, операционная система налагает на него ограничение в максимальном размере. Если параметр содержит значение в формате ASCII, он не может содержать более 256 символов. Если же параметр содержит значение в формате Unicode, то максимальное количество символов для данного параметра равно 16 383. Как правило, основные параметры реестра, создаваемые при инсталляции операционной системы, имеют формат Unicode.

Напомним, что кодировка Unicode является 16-битным стандартом (на один символ выделяется 2 байта, тогда как в кодировке ASCII выделяется только 1 байт), что обеспечивает возможность хранения 65 536 уникальных символов.

Итак, в операционной системе Windows Vista могут использоваться параметры следующих типов.

  • Тип REG_BINARY. Параметры данного типа содержат в себе последовательность двоичных данных, которые в реестре хранятся в шестнадцатеричном формате. Например, многие параметры, содержащие в себе сведения о настройках аппаратной части компьютера, имеют этот тип.

Как правило, если размер значения параметра типа REG_BINARY не больше 4 байт, его можно заменить на параметр, имеющий тип REG_DWORD. Однако при этом не следует забывать, что значения параметров типа REG_DWORD хранятся в противоположном порядке, чем значения параметров типа REG_BINARY. Например, если значение параметра типа REG_BINARY равно 12 34 56 78, то аналогичное значение в параметре типа REG_DWORD будет равно 0x78563412. Доказательство данного утверждения можно легко увидеть при помощи редактора реестра regedit.exe.

  • Тип REG_DWORD. Параметры данного типа содержат в себе двоичные данные, длина которых составляет 4 байта. Большинство параметров реестра числового типа имеют именно этот тип.

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

Разновидностью параметров типа REG_DWORD являются параметры типов REG_DWORD_LITTLE_ENDIAN и REG_DWORD_BIG_ENDIAN. Отличие данных параметров от параметра REG_DWORD и между собой заключается только в одном. Если параметр REG_DWORD_LITTLE_ENDIAN хранит самый младший байт своего значения на первом месте в памяти, то параметр REG_DWORD_BIG_ENDIAN хранит младший байт на последнем месте в памяти.

  • Тип REG_QWORD. Параметры данного типа содержат в себе двоичные данные, длина которых составляет 8 байт. Во всем остальном параметры данного типа аналогичны параметрам типа REG_DWORD.
  • Тип REG_EXPAND_SZ. Параметры данного типа представляют собой строковые параметры (содержат одну строку текста), которые могут содержать в себе различные переменные окружения.

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

%systemroot%. Заменяется путем к каталогу Windows.

%windir%. Заменяется путем к каталогу Windows.

%systemdrive%. Заменяется буквой системного диска (диск, на котором расположен каталог Windows).

%userprofile%. Заменяется путем к каталогу профиля текущего пользователя.

%username%. Заменяется именем текущего профиля.

%computername%. Заменяется именем компьютера.

%programfiles%. Заменяется путем к каталогу, в который по умолчанию устанавливаются программы.

Также в параметрах данного типа вы можете использовать все переменные, которые описаны в диалоге «Переменные среды». Данный диалог можно вызвать при помощи команды rundll32.exe sysdm.cpl, EditEnvironmentVariables, или же при помощи кнопки Переменные среды, расположенной на вкладке Дополнительно диалога Свойства: Система.

  • Тип REG_MULTI_SZ. Параметры данного типа представляют собой строковые параметры, в которых могут находиться сразу несколько строк текста.
  • Тип REG_SZ. Параметры данного типа представляют собой обычные строковые параметры. Они не могут содержать переменных окружения (переменные интерпретируются как обычный текст).
  • Тип REG_RESOURCE_LIST. Параметры данного типа хранят в себе последовательность вложенных массивов в двоичном виде и служат для хранения списка ресурсов. Например, параметры данного типа можно встретить в подразделах ветви реестра HKLMHARDWARERESOURCEMAP. Дочерние подразделы данной ветви реестра не содержат параметров других типов, кроме параметров типа REG_RESOURCE_LIST и REG_RESOURCE_REQUIREMENTS_LIST.
  • Тип REG_RESOURCE_REQUIREMENTS_LIST. Параметры данного типа хранят в себе последовательность вложенных массивов в двоичном виде и служат для хранения списка драйверов, которые могут быть использованы другим драйвером устройства. Например, параметры данного типа также можно встретить в подразделах ветви реестра HKLMHARDWARERESOURCEMAP.
  • Тип REG_FULL_RESOURCE_DESCRIPTOR. Параметры данного типа хранят в себе последовательность вложенных массивов в двоичном виде, и служат для хранения списка ресурсов, которые используются физическим устройством. Например, параметры данного типа также можно встретить в подразделах ветви реестра HKLMHARDWAREDESCRIPTION.
  • Тип REG_NONE. Параметры данного типа не имеют определенного двоичного или строкового типа. В редакторах реестра они отображаются в виде параметров двоичного типа.
  • Тип REG_LINK. Параметры данного типа представляют собой символическую ссылку в формате Unicode.

Битовая маска

Битовая маска — это стандартный способ описания назначения отдельных битов параметра, имеющего тип REG_DWORD или REG_BINARY. Формат описания битовых масок приведен ниже.

0х00000001 — описание назначения бита 1.

0х00000002 — описание назначения бита 2.

0х00000004 — описание назначения бита 3.

0х00000008 — описание назначения бита 4.

0х00000010 — описание назначения бита 5.

0х00000020 — описание назначения бита 6.

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

Использование битовых масок позволяет упростить описание и изменение значения сложных параметров (биты которых определяют разные настройки поведения операционной системы или программы).

Например, если перед вами будет поставлена задача установить биты параметра, которые были указаны выше в примере битовой маски (то есть биты с первого по шестой), вам достаточно будет выполнить следующие арифметические операции.

1+2+4+8+10+20 = 45.

45 переводим в 16-ричную систему счисления = 3F.

Robo User
Web-droid editor

Додати коментар

Ваша email адреса не буде опублікована.