Реестр
Что это такое?
Первоначально в 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. Если Вы хотите просто посмотреть, что из себя представляет реестр, выполните следующее:
Из каких файлов состоит реестр и где они находятся?
Файлы, составляющие реестр, хранятся в папке %systemroot%/system32/config и состоят из:
Также имеются файлы с другими расширениями:
Какие есть клавиши управления в редакторе реестра Regedit?
Комбинация клавиш |
Действие |
стрелка, направленная вниз |
Переход к следующему разделу, отображенному на экране |
стрелка, направленная вверх |
Переход к предыдущему разделу, отображенному на экране |
стрелка, направленная влево |
Раскрытие выделенного раздела |
стрелка, направленная вправо |
Свертывание раскрытого раздела или переход к разделу на уровень выше |
Alt+Home |
Переход к значку Мой компьютер |
Alt+Home+стрелка влево |
Переход к значку Мой компьютер и свертывание всех ветвей |
Tab |
Переход между левой и правой панелью Редактора реестра |
F1 |
Вызов справки |
F2 |
Переименование выделенного раздела |
F3 |
Открытие окна Поиск или вызов команды Найти далее |
Alt+F4 |
Закрытие Редактора реестра |
F5 |
Обновление содержимого панелей Редактора реестра |
F6 |
Переход между левой и правой панелью Редактора реестра |
F10 |
Переход к меню управления |
Shift+F10 |
Открытие \ закрытие контекстного меню |
Любой символ |
Переход к следующему доступному подразделу, чье название начинается с выбранного символа |
Как ограничить доступ к редакторам реестра?
Воспользуйтесь редактором реестра (regedt32.exe).
Каков максимальный размер реестра?
Максимальный размер реестра - 102MB, но тем не менее, это можно изменить.
Максимальный размер реестра контролируется параметром HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Control\ RegistrySizeLimit. По умолчанию его не существует, поэтому необходимо его создать:
Минимальное размер - 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.
Для NT можно использовать любой. REGEDIT имеет некоторые ограничения. Наибольшее - то, что он не поддерживает все типы данных реестра (например, REG_MULTI_SZ). Так что, если Вы редактируете этот тип данных REGEDIT'ом, знайте, что он изменит тип записи.
REGEDIT.EXE базируется на Windows95, но имеет некоторые преимущества над REGEDT32.EXE (например, лучшие средства поиска). В целом, с REGEDIT.EXE работать легче. Особенно новичкам.
Как ограничить удаленный доступ к реестру?
Доступ к удаленному редактированию реестра контролируется ACL ключом winreg реестра.
Возможно установить, чтобы некоторые ключи были доступны для пользователя, даже если ему не дали прав на редактирование: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg\AllowedPaths\Machine (используйте regedt32). Добавьте необходимые пути в список.
Как узнать, какие изменения были сделаны в реестре?
Используя программу regedit.exe, можно экспортировать часть реестра. А потом сравнить с текущей.
Для этого выполните следующее:
Для мониторинга изменений реестра также можно использовать ПО сторонних производителей. Например, 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 можно установить аудит изменений отдельных частей реестра. Ведение аудита - очень чувствительная мера, позволяющая выводить предупреждающие сообщения людям, нарушающим установленные Вами правила редактирования реестра.
Убедитесь, что у Вас включен 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 .
Потому что раздел HKEY_LOCAL_MACHINE\HARDWARE создается заново после каждой перезагрузки. Остальные разделы HKLM (SOFTWARE, SYSTEM, SAM, SECURITY) хранятся локально на диске и не перезаписываются при перезагрузке.
Стандартная форма выполнения *.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 (редактор реестра, входящий в NT 4.0 resource kit). Скачайте исправленную версию с ftp://ftp.microsoft.com/bussys/winnt/winnt-public/reskit/nt40/i386/reg_x86.exe
Обычно .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 не нужно ставить после имени файла обратный слеш со знаком вопроса (/?).
Кроме указанных в справке ключей, есть недокументированный ключ /S, позволяющий выполнять команды без вывода предупреждений. Данный ключ работает только при запуске regedit через Пуск -> Выполнить -> Открыть.
Какие ключи реестра используются апплетом Add/Remove Programs?
Ниже перечислены ключи реестра, используемые апплетом Add/Remove Programs. Как правило, эти ключи устанавливаются в процессе регистрации апплета при помощи команды REGSRV APPWIZ.CPL, запущенной из командной строки.
Нижеперечисленные ключи используются в процессе работы апплета Add/Remove Programs: