Реестр


 

Что это такое?

Первоначально в Windows вместо реестра использовались *.ini файлы, но при  работе с ними возникало много проблем - ограничения размеров, отсутствие стандартного формата, медленный доступ, отсутствие поддержки сети и т.д. В Windows 3.1 (именно Windows, а не Windows NT) уже существовал реестр, который хранился в reg.dat и мог быть просмотрен, используя regedit.exe. Он использовался для интеграции DDE, OLE и File Manager.  В Windows NT реестр - сердце NT, в котором хранится почти вся информация, разделенная на несколько подразделов, каждый из которых начинается с HKEY_.

HKEY_LOCAL_MACHINE

Содержит информацию об аппаратной конфигурации и установленном программном обеспечении.

HKEY_CLASSES_ROOT

Это просто линк на HKEY_LOCAL_MACHINE\SOFTWARE\Classes   Содержит связи между приложениями и типами файлов, а также информацию об OLE.

HKEY_CURRENT_CONFIG

Это линк на HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current Содержит информацию о текущей конфигурации.

HKEY_CURRENT_USER

Это линк на HKEY_USERS\<SID of User>  Содержит информацию о текущих пользователях (как например, переменные среды, сетевые подключения, принтеры и т.д.)

HKEY_USERS

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

Каждый раздел может иметь несколько подразделов, а каждый подраздел может иметь несколько собственных   подразделов . Каждый раздел/подраздел может иметь несколько значений, состоящих из трех частей:

Редактировать реестр можно с помощью двух инструментов: regedt32.exe и regedit.exe.Regedit.exe обладает лучшими средствами поиска, но не поддерживает все типы парметров Windows NT. Если Вы хотите просто посмотреть, что из себя представляет реестр, выполните следующее:

  1. Откройте редактор реестра (regedit.exe или regedt32.exe)
  2. В Regedt32.exe Вы можете установить на реестр режим "только чтение", что не позволит Вам в нем что-нибудь сломать :-) (Options - Read Only Mode)
  3. Выделите подраздел HKEY_USERS .
  4. Перейдите в .default - Control Panel - Desktop и Вы увидите множество параметров в правой части панели.
  5. Один из них - обои (это фон, который отображается до Вашего входа в систему).

 

Из каких файлов состоит реестр и где они находятся?

Файлы, составляющие реестр, хранятся в папке %systemroot%/system32/config и состоят из:

Также имеются файлы с другими расширениями:

Какие есть клавиши управления в редакторе реестра Regedit?

Комбинация клавиш

Действие

стрелка, направленная вниз

Переход к следующему разделу, отображенному на экране

стрелка, направленная вверх

Переход к предыдущему разделу, отображенному на экране

стрелка, направленная влево

Раскрытие выделенного раздела

стрелка, направленная вправо

Свертывание раскрытого раздела или переход к разделу на уровень выше

Alt+Home

Переход к значку Мой компьютер

Alt+Home+стрелка влево

Переход к значку Мой компьютер и свертывание всех ветвей

Tab

Переход между левой и правой панелью Редактора реестра

F1

Вызов справки

F2

Переименование выделенного раздела

F3

Открытие окна Поиск или вызов команды Найти далее

Alt+F4

Закрытие Редактора реестра

F5

Обновление содержимого панелей Редактора реестра

F6

Переход между левой и правой панелью Редактора реестра

F10

Переход к меню управления

Shift+F10

Открытие \ закрытие контекстного меню

Любой символ

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


Как ограничить доступ к редакторам реестра?

Воспользуйтесь редактором реестра (regedt32.exe).

  1. Выделите HKEY_USERS и затем, Load Hive из меню Registry.
  2. Перейдите в папку с Profile пользователя, которому Вы хотите ограничить доступ к редакторам реестра, и выберите NTUser.dat.
  3. После вывода подсказки для ввода Key Name, введите его UserID.
  4. Перейдите в \Software\Microsoft\Windows\CurrentVersion\Policies.
  5. Если не существует параметра System, нажмите Add Key. Потом Add Value и введите DisableRegistryTools (в System key) Тип REG_DWORD, значение установите в 1.
  6. Unload Hive из меню Registry.

Каков максимальный размер реестра?

Максимальный размер реестра - 102MB, но тем не менее, это можно изменить.

Максимальный размер реестра контролируется параметром HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Control\ RegistrySizeLimit. По умолчанию его не существует, поэтому необходимо его создать:

  1. Откройте редактор реестра (regedit.exe)
  2. Перейдите в HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Control
  3. Из меню Edit выберите New, тип Dword. Введите имя RegistrySizeLimit
  4. Двойным щелчком откройте новый параметр и введите значение в байтах (выберите десятичный тип исчислений)

Минимальное размер - 4MB, и даже если фактически меньше, значение будет принудительно увеличено до 4MB. Максимальный размер - 80% от "paged pool" (если его максимальный размер 128MB, следовательно, 102MB - это 80% от 128MB). Когда значение не установлено, то максимальный размер ограничен 25% от "paged pool". "Paged pool" - область физической памяти, используемая для данных системы, которые могут быть перемещены из оперативной памяти на винчестер во время их простоя.

Важно знать, что RegistrySizeLimit - это максимум, а не выделение. И установка более высокого значения не резервирует свободное пространство и не гарантирует достижения такого размера. Это можно сделать, воспользовавшись апплетом System в Control Panel. Нажмите вкладку Performance и установите максимальный размер реестра. Перезагрузитесь.

Есть и другие проблемы: в начале загрузки NTLDR загружает некий программный код, распределяет рабочую память и читает части реестра. Все это должно быть загружено в первые 16MB памяти, независимо от того, сколько ее у Вас установлено. Считываемые системные файлы загружаются в память полностью, независимо от того, на сколько они используются :(

Некоторые другие проблемы:

Способы избавления от вышеописанной проблемы:

Предотвратить данную проблему можно. Используя REGEDT32, вставьте параметр "ReportBootOk:REG_SZ:0" [ноль] в HKEY_Local_Machine\ SOFTWARE\ Microsoft\ WindowsNT\ CurrentVersion\ Winlogon. Это предотвратит создание LastKnownGood ControlSet. Если ошибки при загрузке вызваны превышением 16MB при работе NTLDR, то dump не производится и MS не сможет решить эту проблему. Проблема 16 MB не решена и в NT5.

Что использовать: REGEDIT.EXE или REGEDT32.EXE?

Для NT можно использовать любой. REGEDIT имеет некоторые ограничения. Наибольшее - то, что он не поддерживает все типы данных реестра (например, REG_MULTI_SZ). Так что, если Вы редактируете этот тип данных REGEDIT'ом, знайте, что он изменит тип записи.

REGEDIT.EXE базируется на Windows95, но имеет некоторые преимущества над REGEDT32.EXE (например, лучшие средства поиска). В целом, с REGEDIT.EXE работать легче. Особенно новичкам.

Как ограничить удаленный доступ к реестру?

Доступ к удаленному редактированию реестра контролируется ACL ключом winreg реестра.

  1. Откройте редактор реестра (regedt32.exe)
  2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers
  3. Найдите ключ с именем winreg. Если его нет, создайте (Edit -Add Key).
  4. Выделите ключ winreg (нажмите на нем).
  5. В меню Security выберите permissions
  6. Нажмите Add и дайте пользователю, которого хотите ограничить, доступ read (чтение)
  7. После добавления, нажмите на пользователе и выберите "Special Access".
  8. И даблкликнув на пользователе можно еще выбрать, какие действия он сможет выполнять
  9. OK.

Возможно установить, чтобы некоторые ключи были доступны для пользователя, даже если ему не дали прав на редактирование: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg\AllowedPaths\Machine (используйте regedt32). Добавьте необходимые пути в список.

Как узнать, какие изменения были сделаны в реестре?

Используя программу regedit.exe, можно экспортировать часть реестра. А потом сравнить с текущей.

Для этого выполните следующее:

  1. Откройте редактор реестра (regedit.exe)
  2. Выберите ключ, который Вы хотите отследить.
  3. Выберите в меню Реестр пункт Экспорт файла реестра (Export registry file)
  4. Введите имя файла (если хотите экспортировать весь реестр, просто пометьте в меню "Export Range All") и нажмите OK
  5. Выполните изменения в реестре (установка ПО или изменение системных параметров)
  6. Повторите шаги 1-4, используя другое имя для сохраняемого файла
  7. Откройте утилиту сравнения двух файлов (например, windiff.exe)
  8. Если Вы используете windiff.exe, выберите Compare Files из меню File. На запрос укажите 2 файла для сравнения
  9. После сравнения будет показано окно с выводом различий.
  10. Нажмите F8 для просмотра следующего различия (если их несколько)

Для мониторинга изменений реестра также можно использовать ПО сторонних производителей. Например, RegSnap [Win9X / NT. (184 Kb)].

Как удалить значение/ключ реестра из командной строки?

Используя утилиту REG.EXE из Windows NT Resource Kit Supplement 2 Вы можете удалить параметр реестра и из командной строки или командного файла. Пример:

reg delete HKLM\Software\test

Удалится параметр HKEY_LOCAL_MACHINE\Software\test . После ввода команды выводится запрос на подтверждение удаления, вводим Y. Чтобы избежать вывода запроса на подтверждение, добавьте параметр /f , например:

reg delete HKLM\Software\test /f

Полный список кодов разделов реестра, используемых с REG DELETE:

HKCR

HKEY_CLASSES_ROOT

HKCU

HKEY_CURRENT_USER

HKLM

HKEY_LOCAL_MACHINE

HKU

HKEY_USERS

HKCC

HKEY_CURRENT_CONFIG

Для удаления значений в реестре на удаленной машине добавьте имя машины: \\< имя машины >, например:

reg delete HKLM\Software\test \\andrey


Как провести аудит изменений реестра?

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

  1. Откройте редактор реестра (regedt32.exe)
  2. Выберите ключ, на который хотите назначить аудит (например, HKEY_LOCAL_MACHINE\Software)
  3. Из меню Security (Безопасность), выберите Auditing (Аудит).
  4. Пометьте "Audit Permission on Existing Subkeys" (Разрешение аудита для существующих разделов), если Вы хотите проводить аудит и подразделов.
  5. Нажмите Add (добавить) и выберите пользователей, которые будут подвержены аудиту, нажмите Add и OK
  6. В разделе "Names" можно выбрать, аудит каких событий будет проводиться.
  7. После заполнения всей информации, нажмите OK.

Убедитесь, что у Вас включен Auditing for File and Object (воспользуйтесь User Manager - Polices - Audit).

Для просмотра результатов аудита, воспользуйтесь Event Viewer (Просмотр событий), раздел Security.

Как очистить реестр от поврежденных ключей?

Microsoft выпустила утилиту, называемую RegClean, которая просканирует содержимое Вашего реестра и удалит неиспользуемые/поврежденные ключи. Текущая версия RegClean:  http://support.microsoft.com/download/support/mslfiles/RegClean.exe

После загрузки просто запустите ее, и она, просканировав Ваш реестр, выдаст запрос на устранение ошибок (Fix Errors). Для выхода, нажмите клавишу Exit.

Если были внесены изменения в реестр, RegClean в своей директории создаст файл отмены изменений с именем "Undo <machine name> <yyyymmdd> <hhmmss>.reg"
Пример: "Undo workstation 19980320 104323.reg"

Для отмены сделанных в реестре изменений, даблкликните на файле отмены изменений.

Более подробная информация: http://support.microsoft.com/support/kb/articles/q147/7/69.asp .

Почему не сохраняются изменения в разделе HKLM\HARDWARE регистра?

Потому что раздел HKEY_LOCAL_MACHINE\HARDWARE создается заново после каждой перезагрузки. Остальные разделы HKLM (SOFTWARE, SYSTEM, SAM, SECURITY) хранятся локально на диске и не перезаписываются при перезагрузке.

Как выполнить *.reg файл без вывода подтверждения?

Стандартная форма выполнения *.reg файла из командной строки:

C:\> regedit <registry file>.reg

После ее выполнения вылезет сообщение "Information is <filename>.reg has been successfully entered into the registry"

Если Вы хотите запретить вывод подтверждения, используйте ключ /s :

C:\> regedit /s <registry file>.reg

Почему REG.EXE не обновляет значения типа DWORD?

Это ошибка REG.EXE (редактор реестра, входящий в NT 4.0 resource kit). Скачайте исправленную версию с ftp://ftp.microsoft.com/bussys/winnt/winnt-public/reskit/nt40/i386/reg_x86.exe

Как установить .inf файл из командной строки?

Обычно .inf файл устанавливают нажатием на нем правой клавишей мыши с дальнейшим выбором Install из контекстного меню. Но можно установить и из командной строки:

C:\> rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 .\<file>.inf

Какие типы данных существуют в реестре?

Внизу, в таблице, приведен список данных, поддерживаемых Regedt32.exe. Regedit.exe не поддерживает REG_EXPAND_SZ и REG_MULTI_SZ

REG_BINARY

Двоичные данные

REG_DWORD

Двойное слово (4 байта). Может отображаться в двоичном, шестнадцатеричном и десятичном форматах.

REG_EXPAND_SZ

Расширенная текстовая строка, содержащая переменную (например %systemroot%)

REG_MULTI_SZ

Многострочный параметр (multiple line string).

REG_SZ

Текстовая строка

Как автоматизировать обновление реестра?

Есть два метода для создания сценариев автоматической модификации реестра. Первый - создание *.reg файла, который можно выполнить, используя

regedit /s <reg file>

Формат такого файла:

REGEDIT4
[<key name>]
"<value name>"="<value>" a string value
"<value name>"=hex:<value> a binary value
"<value name>"=dword:<value> a dword value

Пример:

REGEDIT4

[HKEY_USERS\.DEFAULT\Control Panel\Desktop]
"Wallpaper"="E:\\WINNT\\winfaq.bmp"
"TileWallpaper"="0"

[HKEY_USERS\.DEFAULT\Control Panel\Colors]
"Background"="0 0 0"

Установит обои "по умолчанию" и цвет фона до входа в систему.

Второй метод - это использование пришедших из Windows 95  *.inf файлов. Они выполняются используя   следующий формат команды:

rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 <inf file>

Формат файлов следующий:

[Version]
Signature = "$Windows NT$"
Provider=%Provider%

[Strings]
Provider="WinFAQ Ltd"

[DefaultInstall]
AddReg = AddReg
DelReg = DelReg
UpdateInis = UpdateInis

[AddReg]
[DelReg]
[UpdateInis]

Используемые ключи:

HKCR

HKEY_CLASSES_ROOT

HKCU

HKEY_CURRENT_USER

HKLM

HKEY_LOCAL_MACHINE

HKU

HKEY_USERS

Ниже представлен пример *.inf файла, выполняющего те же действия, что и описанный выше *.reg файл:

[Version]
Signature = "$Windows NT$"

[DefaultInstall]
AddReg = AddReg

[AddReg]
HKU,".DEFAULT\Control Panel\Colors","Background",0000000000,"0 0 0"
HKU,".DEFAULT\Control Panel\Desktop","Wallpaper",0000000000,"E:\WINNT\winfaq.bmp"
HKU,".DEFAULT\Control Panel\Desktop","TileWallpaper",0000000000,"1"


Как сжать реестр?

Следующая процедура может быть использована для уплотнения файлов реестра. Будьте осторожны. Неверное выполнение может привести к полному краху системы.

1.       Сделайте резервные копии всех системных файлов, включая реестр.

2.       Выполните из командной строки "RDISK /S-" для обновления резервных копий в %systemroot%\repair Данные реестра при этом будут несколько упорядочены и сжаты.

3.       Раскройте эти файлы во временную директорию:

EXPAND %systemroot%\REPAIR\DEFAULT._ %temp%\DEFAULT
EXPAND %systemroot%\REPAIR\SAM._ %temp%\SAM
EXPAND %systemroot%\REPAIR\SECURITY._ %temp%\SECURITY
EXPAND %systemroot%\REPAIR\SOFTWARE._
%temp%\SOFTWARE
EXPAND %systemroot%\REPAIR\SYSTEM._ %temp%\SYSTEM

4.       Сравните размеры файлов, находящихся в Вашей временной папке %temp% с размерами таких же файлов в %systemroot%\system32\config. У меня они сократились суммарно с 15Mb до 8,8Mb.

5.       Файлы реестра из %systemroot%\system32\config могут быть перезаписаны уплотненными версиями из временной папки %temp% несколькими путями:

·         Перезагрузитесь в DOS или Win3.x/95/98 и просто перепишите старые файлы новыми (конечно, если системные файлы расположены на FAT)

·         Заменить эти файлы, загрузив другую Windows NT (подключить Ваш винчестер к другому компьютеру с NT).

·         Использовать команду MV (move) из Resource Kit`а для перемещения этих файлов во время перезагрузки NT. Пример:

MV /X /D %temp%\DEFAULT %systemroot%\SYSTEM32\CONFIG\DEFAULT
MV /X /D %temp%\SAM %systemroot%\SYSTEM32\CONFIG\SAM
MV /X /D %temp%\SECURITY %systemroot%\SYSTEM32\CONFIG\SECURITY
MV /X /D %temp%\SOFTWARE %systemroot%\SYSTEM32\CONFIG\SOFTWARE
MV /X /D %temp%\SYSTEM %systemroot%\SYSTEM32\CONFIG\SYSTEM

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

С какими ключами можно использовать regedit?

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

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

Кроме указанных в справке ключей, есть недокументированный ключ /S, позволяющий выполнять команды без вывода предупреждений. Данный ключ работает только при запуске regedit через Пуск -> Выполнить -> Открыть.

Какие ключи реестра используются апплетом Add/Remove Programs?

Ниже перечислены ключи реестра, используемые апплетом Add/Remove Programs. Как правило, эти ключи устанавливаются в процессе регистрации апплета при помощи команды REGSRV APPWIZ.CPL, запущенной из командной строки.

Нижеперечисленные ключи используются в процессе работы апплета Add/Remove Programs:

Hosted by uCoz