Роман Клименко
Тонкости реестра Windows Vista. Трюки и эффекты

Введение

   Как известно, реестр является одной из главных составных частей операционных систем семейства Windows и во многом определяет их работу. Несмотря на это многие пользователи эксплуатируют Windows, даже не подозревая о существовании системного реестра. В первую очередь это обусловлено тем, что некоторые наиболее часто применяемые пользовательские настройки доступны для редактирования за пределами реестра (например, через Панель управления). «Непродвинутый» пользователь может и не догадываться, что при изменении параметров работы мыши, клавиатуры, монитора и других устройств соответствующие изменения автоматически вносятся в системный реестр. Но следует отметить, что пользователю и не всегда нужно об этом знать, поскольку работа с реестром относится, скорее, к сфере деятельности системного администратора.
   Однако для опытного пользователя не является секретом, что более тонкая настройка операционной системы и некоторых приложений производится с помощью системного реестра. При этом помимо стандартных приемов его редактирования, детально описанных в соответствующей литературе, полезно знать и уметь выполнять некоторые специфические, нестандартные операции, помогающие получить желаемый результат более простым и быстрым способом. Описанию подобных трюков и посвящена эта книга.
   Помимо описания разнообразных приемов редактирования системного реестра, книга включает в себя информацию о специально разработанных утилитах, предназначенных для работы с ним. Кроме того, в гл. 6 в режиме «вопрос – ответ» кратко описаны некоторые затруднительные ситуации, которые могут возникать при работе с реестром Windows Vista, и даны рекомендации по выходу из подобных ситуаций.
От издательства
   Ваши замечания, предложения и вопросы отправляйте по адресу электронной почты dgurski@minsk.piter.com (издательство «Питер», компьютерная редакция).
   Мы будем рады узнать ваше мнение!
   На сайте издательства http://www.piter.com вы найдете подробную информацию о наших книгах.

Глава 1
Основные понятия о реестре Windows Vista

   • Группировка данных в реестре
   • Типы данных, используемые в реестре
   • Общие правила работы с реестром
   • Использование REG-файлов
   • Резервное копирование и восстановление реестра
 
   Эффективность эксплуатации любого программного продукта во многом зависит от того, насколько грамотно и корректно была произведена его настройка. Обычно параметры настройки собраны в специальной базе данных, являющейся одним из основных компонентов программы. В операционной системе Windows такая база данных называется системным реестром, содержимое которого мы кратко рассмотрим в этой главе.

1.1. Группировка данных в реестре

   Все параметры системного реестра WindowsVis ta в зависимости от их функционального назначения сгруппированы в пяти основных разделах, называемых корневыми.
   Кратко остановимся на каждом из них (надо отметить, что название каждого раздела начинается с английской аббревиатуры HKEY).
   • HKEY_CLASSES_ROOT – включает в себя информацию о зарегистрированных в системе типах файлов, порядке обработки файлов каждого типа, а также управлении основными настройками интерфейса (то есть содержит настройки ActiveX-объектов).
   Кроме того, данный корневой раздел содержит сведения о программных пакетах MSI, которые были установлены в операционной системе, определяет список программ окна Открыть с помощью, а также хранит список интерфейсов (библиотек типов), которыми можно пользоваться при программировании под Windows.
   • HKEY_CURRENT_USER – содержит информацию о пользователе, работающем с Windows Vista в текущем сеансе, а также о различных настройках системы, относящихся к текущему пользователю (вид Рабочего стола, сетевые соединения, принтеры и др.).
   • HKEY_LOCAL_MACHINE – хранит информацию об аппаратной конфигурации компьютера и установленном программном обеспечении. Настройки раздела действительны для всех пользователей данного компьютера. Надо сказать, что по объему информации этот раздел является самым большим, если сравнивать с другими разделами реестра Windows Vista.
   Нужно отметить тесную взаимосвязь данного корневого раздела с разделом HKEY_CLASSES_ROOT. Фактически HKEY_CLASSES_ROOT является ссылкой на ветвь реестра HKEY_LOCAL_MACHINE\SOFTWARE\Classes.
   • HKEY_USERS – включает в себя информацию обо всех пользователях данного компьютера.
   Следует отметить тесную взаимосвязь данного корневого раздела с разделом HKEY_CURRENT_USER, который фактически является ссылкой на подраздел корневого раздела HKEY_USERS, хранящий сведения о текущем пользователе.
   • HKEY_CURRENT_CONFIG – хранит информацию о настройках оборудования, которое используется локальным компьютером в текущем сеансе работы.
   Надо сказать, что данный корневой раздел является ссылкой на подраздел реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles.
   В целом структура реестра представлена в иерархическом порядке: каждый из перечисленных разделов имеет ряд подчиненных уровней иерархии, нижней ступенью которой являются параметры настройки системного реестра.
   Примером иерархии можно считать указанный выше подраздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles. Он начинается с корневого раздела HKEY_LOCAL_MACHINE. Подраздел SYSTEM находится в корневом разделе HKEY_LOCAL_MACHINE и является подчиненным ему. Подраздел CurrentControlSet находится в подразделе SYSTEM и т. д.

1.2. Типы данных, используемые в реестре

   Рассмотрим наиболее часто используемые в реестре Windows Vista типы данных.
   • REG_BINARY – двоичные данные. Этот тип данных используется, например, для хранения сведений об аппаратных ресурсах; сведения выводятся в Редакторе реестра в шестнадцатеричном формате.
   • REG_DWORD – целое число. Может использоваться, например, в качестве переключателя (1 – включение, 0 – выключение некоторого действия); могут применяться и другие числа. Возможно представление этого типа данных в двоичном, десятичном и шестнадцатеричном формате. Этот тип данных используется, например, в параметрах драйверов устройств.
   • REG_EXPAND_SZ – расширенная строка. Этот тип данных используется в Windows для ссылок на файлы. Кроме произвольного текста значение параметра такого типа может включать в себя специальные переменные, заменяющиеся определенными путями к каталогам во время своей «интерпретации». Например, значение параметра данного типа может содержать такие специальные переменные.
   – %systemroot% – заменяет собой путь к каталогу, в котором операционная система хранит свои файлы (например, каталог C: \Windows).
   – %windir% – является эквивалентом предыдущей переменной. Ее отличие от %systemroot% заключается в том, что переменную %systemroot% переопределить нельзя, а каталог, к которому ведет переменная %windir%, можно изменить с помощью окна Переменные среды, вызываемого нажатием соответствующей кнопки на вкладке Дополнительно окна Свойства системы.
   – %systemdrive% – заменяет собой букву системного диска (диска, в котором операционная система хранит свои файлы).
   – %userprofile% – заменяет собой путь к каталогу, хранящему профиль текущего пользователя.
   – %programfiles% – заменяет собой путь к каталогу, в который операционная система по умолчанию устанавливает все программы.
   – %username% – в отличие от предыдущих переменных, она заменяет собой не путь к каталогу, а имя текущего пользователя, работающего с системой.
   – %computername% – как и предыдущая переменная, она не имеет никакого отношения к файловой системе Windows. Эта переменная заменяет собой имя компьютера (именно это имя используется при обращении к компьютеру по сети и хранится в строковом параметре ComputerName ветви реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName).
   • REG_MULTI_SZ – многострочный текст (массив строк). Этот тип обычно используется для представления списков и иных подобных записей в удобном для чтения формате.
   • REG_SZ – текстовая строка. Данные этого типа используются в реестре чаще всего.
   • REG_FULL_RESOURCE_DESCRIPTOR – последовательность вложенных массивов, предназначенная для хранения списка ресурсов устройств или драйверов.
   С помощью программы Редактор реестра параметры данного типа создать нельзя (но можно создать с помощью REG-файлов).
   • REG_LINK – строковый тип данных, предназначенный для указания пути к файлам. С помощью программы regedit параметры данного типа создать нельзя (но их также можно создать с помощью REG-файлов).
   Помимо перечисленных выше типов данных, в системном реестре могут использоваться типы REG_NONE, REG_RESOURCE_LIST и др.

1.3. Общие правила работы с реестром

   Редактировать системный реестр можно вручную или с помощью специально предназначенных утилит. Порядок использования утилит описан в гл. 5. Здесь же мы подробнее остановимся на редактировании вручную.
   Ручное редактирование системного реестра Windows Vista выполняется либо средствами Редактора реестра, либо с помощью REG-файлов. В следующих разделах мы подробно рассмотрим каждый из этих способов.
   Редактор системного реестра Windows Vista представляет собой встроенный механизм, предназначенный для просмотра и редактирования параметров реестра. Для запуска Редактора реестра предназначен файл regedit.exe, расположенный в каталоге Windows, однако целесообразнее воспользоваться командой Пуск → Выполнить и в открывшемся окне Запуск программы в поле Открыть ввести regedit.

Структура Редактора реестра

   После выполнения команды regedit на экране отображается окно Редактора реестра (рис. 1.1).
   Рис. 1.1. Редактор реестра
 
   В левой части данного окна приводится перечень разделов реестра (на рис. 1.1 раскрыт раздел реестра HKEY_CURRENT_USER), в правой части отображаются параметры и их значения. Главное меню окна Редактора реестра включает в себя пункты Файл, Правка, Вид, Избранное и Справка. Кратко остановимся на каждом из них.
   • В составе меню Файл содержатся команды, предназначенные для работы с реестром в целом. С помощью команд Импорт и Экспорт производится, соответственно, импорт REG-файла в реестр и экспорт реестра целиком либо частично в REG-файл. При активизации данных функций на экране отображается окно, в котором нужно указать путь для выполнения этих действий. При необходимости подключения к реестру удаленного компьютера следует воспользоваться функцией Подключить сетевой реестр; с помощью функции Отключить сетевой реестр выполняется обратное действие.
   • Команды меню Правка используются для работы с разделами либо параметрами реестра. Подменю Создать включает в себя команды Раздел, Строковый параметр, Двоичный параметр, Параметр DWORD (32 бита), Параметр QWORD (64 бита), Мультистроковый параметр и Расширяемый строковый параметр, предназначенные для создания соответствующих элементов реестра. С помощью команды Разрешения осуществляется переход в режим просмотра и редактирования разрешения для текущего раздела (при выборе данной команды на экране отображается окно, в котором выполняются необходимые действия). Команды Удалить (выполняется также нажатием клавиши Delete) и Переименовать предназначены для удаления либо переименования текущего элемента реестра соответственно. В результате выполнения команды Копировать имя раздела (Ctrl+C) в буфер обмена будет скопировано имя текущего раздела. Команды Найти (Ctrl+F) и Найти далее (F3) являются стандартными командами Windows; работа с ними ведется по обычным правилам.
   • Команды меню Вид предназначены для управления отображением информации, содержащейся в окне Редактора реестра. Команда Строка состояния включает/выключает отображение строки состояния. С помощью команды Разделить включается режим перемещения разделителя левой и правой панелей окна. При необходимости отображения данных в двоичном формате следует воспользоваться командой Вывод двоичных данных (эта функция доступна только в том случае, когда указатель мыши расположен в правой панели окна). С помощью команды Обновить (она выполняется и при нажатии клавиши F5) обновляется окно.
   • Команды меню Избранное предназначены для добавления раздела в список избранного либо для удаления его из этого списка.
   • С помощью меню Справка можно вызвать справочную информацию о Редакторе реестра.
   Как отмечалось выше, левая панель окна содержит иерархический перечень разделов реестра. Правая панель окна состоит из столбцов Имя, Тип и Значение, в которых отображается соответствующая информация (имя параметра, тип данных и значение параметра) для активной позиции в левой панели окна.
   В следующем разделе мы рассмотрим порядок редактирования системного реестра Windows Vista.

Редактирование реестра

   Для перехода в режим редактирования параметра системного реестра следует дважды щелкнуть на нем кнопкой мыши либо выполнить команду Изменить контекстного меню, которое появляется при щелчке правой кнопкой мыши на имени параметра. В результате откроется окно редактирования параметра, в котором выполняются необходимые действия. Вид и состав данного окна зависят от типа данных текущего параметра реестра. Кратко рассмотрим все возможные варианты конфигурации окна редактирования.
   На рис. 1.2 показано окно, предназначенное для редактирования параметров, имеющих тип данных REG_DWORD либо REG_DWORD_BIG_ENDIAN.
   Рис. 1.2. Изменение параметра типа REG_DWORD
 
   В поле Параметр данного окна отображается имя редактируемого параметра. Способ представления его значения выбирается с помощью переключателя Система исчисления; возможные варианты – Шестнадцатеричная либо Десятичная. Редактирование значения параметра производится с клавиатуры в поле Значение. При нажатии кнопки OK измененное значение присваивается параметру. С помощью кнопки Отмена можно закрыть данное окно без сохранения изменений.
   На рис. 1.3 приведено окно, в котором производится редактирование параметров с типом данных REG_MULTI_SZ.
   Рис. 1.3. Редактирование параметра типа REG_MULTI_SZ
 
   В данном окне в поле Параметр отображается наименование редактируемого параметра, а в поле Значение с клавиатуры вводится требуемое многостроковое значение данного параметра, присваиваемое ему нажатием кнопки OK.
   На рис. 1.4 представлено окно, предназначенное для редактирования параметров со следующими типами данных: REG_SZ, REG_EXPAND_SZ, REG_LINK, REG_RESOURCE_LIST, REG_FULL_RESOURCE_DESCRIPTOR, REG_RESOURCE_REQUIREMENTS_LIST.
   Рис. 1.4. Редактирование строкового параметра
 
   В поле Параметр данного окна отображается наименование редактируемого параметра, а в поле Значение с клавиатуры вводится его требуемое значение.
   На рис. 1.5 показано окно, предназначенное для редактирования двоичных параметров (то есть параметров с типом данных REG_BINARY).
   Рис. 1.5. Редактирование двоичного параметра
 
   В поле Параметр данного окна отображается наименование редактируемого параметра, а в поле Значение с клавиатуры вводится его требуемое значение. При этом нужно учитывать следующую особенность: в левой части поля Значение отображается номер редактируемого байта, а справа от него – восемь битов данного байта, в которые записывается нужная информация. В режиме редактирования двоичного параметра реализована возможность ввода информации как в двоичной, так и в шестнадцатеричной форме (поразрядно). Нажатием кнопки OK параметру присваивается введенное значение.
   Внимание!
   При редактировании системного реестра Windows Vista следует соблюдать предельную осторожность! Вносить те либо иные изменения в реестр допускается только в том случае, когда вы абсолютно уверены в отсутствии негативных последствий. Редактор реестра не предусматривает отмены выполненных действий, поэтому перед редактированием реестра обязательно сделайте его резервную копию! Помните, что неквалифицированное изменение системного реестра может повлечь за собой катастрофические последствия для операционной системы.
   Следует отметить, что во всех приведенных окнах редактирования значений параметров поле Параметр, содержащее наименование параметра, является нередактируемым. Для изменения имени параметра предназначена команда Переименовать контекстного меню, появляющегося при щелчке правой кнопкой мыши на каком-либо параметре. В состав данного контекстного меню входят функции Изменить, Изменить двоичные данные и Удалить.

1.4. Использование REG-файлов

   В процессе эксплуатации системы могут возникать ситуации, когда редактирование реестра средствами Редактора реестра невозможно либо нецелесообразно. В таких случаях следует использовать файлы реестра, которые имеют расширение REG. В данном разделе мы кратко рассмотрим порядок работы с REG-файлами.
   По своей структуре и содержанию файл реестра представляет собой обычный текстовый файл, поэтому его формирование и редактирование возможно с помощью любого текстового редактора (например, Блокнота). Следует отметить, что для редактирования имеющегося REG-файла целесообразно воспользоваться командой Файл → Экспорт, которая выбирается в окне Редактора реестра. В результате выполнения этой команды требуемый файл (это может быть как файл отдельного раздела или ветви, так и файл реестра целиком) будет экспортирован по указанному пути. После внесения всех необходимых изменений файл импортируется в реестр с помощью команды Файл → Импорт, также вызываемой в окне Редактора реестра.
   Внимание!
   Следует учитывать, что двойной щелчок кнопкой мыши на имени файла реестра в Проводнике не откроет его для редактирования, а приведет к импорту его в реестр таким же образом, как это произошло бы при выполнении команды Файл → Импорт.

Заголовок REG-файла

   Важным элементом любого REG-файла системного реестра Windows является его первая строка, текст которой нельзя изменять ни при каких обстоятельствах. Только по ней система сможет распознать, что текущий файл содержит именно данные реестра. Вот как выглядит эта строка для REG-файлов операционных систем семейства Windows NT (в том числе и операционной системы Windows Vista):
   Windows Registry Editor Version 5.00
   Если вы будете создавать REG-файлы вручную, то вместо этой длинной строки можно использовать другой заголовок:
   REGEDIT4
   Данный заголовок REG-файла использовался в операционных системах семейства Windows9x, а также Windows NT 4. Он считается морально устаревшим, однако вопросы обратной совместимости требуют, чтобы он поддерживался будущими версиями операционных систем Windows.
   Иными словами, REG-файлы, имеющие заголовок REGEDIT4, будут работать на любых версиях операционной системы Windows. Тогда как REG-файлы, имеющие более новый заголовок, будут работать только в операционных системах начиная с Windows NT 5.
   Между REG-файлами со старым и новым заголовком существует еще одно отличие: в REG-файлах с новым заголовком строковые переменные записываются в кодировке Unicode, тогда как в REG-файлах со старым заголовоком используется стандартная кодировка ASCII. Это отличие не важно, если вы создаете REG-файл вручную. Однако, если вы выполняете экспортирование в REG-файл с помощью программы Редактор реестра, следует учитывать то, что REG-файлы с новым заголовком будут иметь больший размер, чем REG-файлы с заголовком REGEDIT4 (при самых худших условиях, то есть если все экспортируемые в REG-файл параметры имеют строковый тип, размер REG-файла с новым заголовком будет в два раза больше).
   По умолчанию при экспортировании содержимого ветви реестра в REG-файл программа Редактор реестра использует новые заголовоки. Если же вы хотите экспортировать в REG-файл старого формата, вам придется самостоятельно выбрать элемент Файлы реестра Win9x/NT4 (-.reg) раскрывающегося списка Тип файла окна Экспорт файла реестра.

Пример REG-файла

   Рассмотрим содержимое одного из файлов реестра на примере части REG-файла раздела HKEY_CURRENT_USER\Control Panel\Mouse.
   Windows Registry Editor Version 5.00
   [HKEY_CURRENT_USER\Control Panel\Mouse]
   "ActiveWindowTracking"=dword:00000000
   "DoubleClickHeight"="4"
   "SmoothMouseXCurve"=hex:00,00,00,00,00,00,00,00,15,6e,00,00,\
   00,00,00,00,00,40,01,00,00,00,00,00,29,dc,03,00,00,00,00,00,\
   00,00,28,00,00,00,00,00
   После первой строки текста REG-файла (заголовка) обязательно должна следовать пустая строка. Затем в квадратных скобках указывается раздел системного реестра, к которому относятся редактируемые параметры (в качестве разделителя между объектами реестра используется символ \). Далее следует перечисление параметров редактируемого раздела с указанием имени параметра, типа данных и значения параметра (каждый параметр отображается в отдельной строке текста файла). При этом соблюдаются следующие правила: имя параметра заключается в кавычки, затем после знака равенства указывается тип данных, далее после двоеточия – значение параметра. Если же тип данных не указан, то по умолчанию соответствующий параметр считается строковым и его значение заключается в кавычки. Последняя строка REG-файла должна оставаться пустой.
   Редактирование текста REG-файла осуществляется по обычным правилам работы с текстовыми файлами. Кроме того, с помощью REG-файла можно удалять элементы системного реестра. Например, чтобы удалить раздел реестра, необходимо перед его именем в тексте REG-файла поставить знак «минус»:
   [-HKEY_CURRENT_USER\Control Panel\Mouse]
   Примечание
   Следует учитывать, что удаление раздела невозможно до тех пор, пока не удалены все входящие в его состав подразделы, поэтому сначала необходимо произвести подобную операцию с ними.
   Для удаления значения параметра следует поставить знак – после знака =:
   «SnapToDefaultButton»=–
   Сделанные изменения будут перенесены в реестр после импорта отредактированного REG-файла.

1.5. Резервное копирование и восстановление реестра

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

Архивирование в REG-файл

   Самым простым способом является создание резервной копии с помощью Редактора реестра. В левой панели окна редактора следует установить указатель мыши на ветвь Компьютер (в этом случае будет сохранен весь реестр; если необходимо сделать копию какой-либо его части, то нужно выделить ее указателем) и выполнить команду Файл → Экспорт либо команду Экспортировать контекстного меню, которое появляется при щелчке правой кнопкой мыши на выделенном элементе. В результате на экране откроется стандартное окно Экспорт файла реестра, в котором следует указать имя файла и путь для его сохранения, а затем нажать кнопку Сохранить. После этого реестр (либо выделенная его часть) будет сохранен в виде REG-файла (описание порядка работы с REG-файлами см. в разд. 1.4). Рекомендуется, помимо сохранения файла реестра на локальном компьютере, сохранять его и на внешнем носителе информации (другой компьютер, компакт-диск и т. п.). Для последующего восстановления системного реестра из сохраненного заранее REG-файла необходимо запустить Редактор реестра и выполнить команду Файл → Импорт. В результате на экране отобразится стандартное окно Импорт файла реестра, в котором следует указать путь для импорта файла.

Создание куста реестра

   Более удобным и одновременно более сложным способом архивирования части реестра является создание куста реестра. Кустом реестра называется ветвь или корневой раздел, которые хранятся в отдельном файле. Собственно, сам реестр операционных систем семейства Windows хранится в виде отдельных кустов (расположенных в каталоге %systemroot%\system32\config), поэтому, создавая куст, вы фактически создаете часть реестра, которую впоследствии можно будет загрузить в Редактор реестра.
   Чтобы создать куст реестра, необходимо воспользоваться командой вида reg save <ветвь реестра> <файл>. Например, архивирование корневого раздела HKEY_CURRENT_USER в файл MyHKEY_CURRENT_USER.hiv, расположенный в каталоге c:, выполняется с помощью команды reg save HKEY_CURRENT_USER c: \MyHKEY_CURRENT_USER.hiv.
   Впоследствии вы всегда сможете восстановить содержимое ветви реестра из созданного ранее куста. Для этого предназначена команда вида reg restore <ветвь реестра> <файл>. Например, reg restore HKEY_CURRENT_USER c: \MyHKEY_CURRENT_USER.hiv.
   Создание и восстановление из куста реестра выполняется намного быстрее, чем создание и восстановление из REG-файла. Однако это еще не все преимущества использования кустов реестра.
   Главным преимуществом данного способа архивирования является то, что вы в любой момент сможете воспользоваться программой Редактор реестра, чтобы отредактировать содержимое созданного ранее куста. Например, изменить значение какого-либо параметра, создать или удалить параметр или ветвь реестра и т. д. В общем, выполнить над кустом любую операцию, которую можно выполнить над самим реестром. Для этого нужно запустить программу regedit.exe, после чего выделить один из основных корневых разделов реестра (например, HKEY_LOCAL_MACHINE), а потом воспользоваться командой меню Файл → Загрузить куст. Это приведет к отображению нескольких окон. В первом из них нужно выбрать файл куста реестра, который вы хотите загрузить. Во втором же нужно ввести какое-либо имя, под которым этот куст будет отображаться в выделенном вами корневом разделе (то есть в корневом разделе HKEY_LOCAL_MACHINE). Например, можно ввести имя HKEY_CURRENT_USER. Результат действий представлен на рис. 1.6.