Реестр Windows (англ. Windows Registry), или системный реестр — иерархически построенная база данных параметров и настроек в большинстве операционных систем Microsoft Windows.
Реестр содержит информацию и настройки для аппаратного обеспечения, программного обеспечения, профилей пользователей, предустановки. Большинство изменений в Панели управления, ассоциации файлов, системные политики, список установленного ПО фиксируются в реестре.
Реестр Windows был введён для упорядочения информации, хранившейся до этого во множестве INI-файлов, обеспечения единого механизма (API) записи-чтения настроек и избавления от проблем коротких имён, отсутствия разграничения прав доступа и медленного доступа к ini-файлам, хранящимся на файловой системе FAT16, имевшей серьёзные проблемы быстродействия при поиске файлов в директориях с большим их количеством. Со временем (окончательно — с появлением файловой системы NTFS) проблемы, решавшиеся реестром, исчезли, но реестр остался из-за обратной совместимости, и присутствует во всех версиях Windows, включая последнюю. Поскольку сейчас не существует реальных предпосылок для использования подобного механизма, Microsoft Windows — единственная (не считая ReactOS) операционная система из используемых сегодня, в которой используется механизм реестра операционной системы.
Реестр в том виде, как его использует Windows и как видит его пользователь в процессе использования программ работы с реестром, формируется из различных данных. Чтобы получилось то, что видит пользователь, редактируя реестр, происходит следующее.
Вначале, в процессе установки и настройки Windows, на диске формируются файлы, в которых хранится часть данных относительно конфигурации системы.
Затем, в процессе каждой загрузки системы, а также в процессе каждого входа и выхода каждого из пользователей, формируется некая виртуальная сущность, называемая «реестром» — объект REGISTRY\. Данные для формирования «реестра» частично берутся из тех самых файлов (Software, System …), частично из информации, собранной ntdetect при загрузке (HKLM\Hardware\Description).
То есть часть данных реестра хранится в файлах, а часть данных формируется в процессе загрузки Windows.
Для редактирования, просмотра и изучения реестра стандартными средствами Windows (программы regedit.exe и regedt32.exe) доступны именно ветки реестра. После редактирования реестра и/или внесения в него изменений эти изменения сразу записываются в файлы.
Однако есть программы сторонних разработчиков, которые позволяют работать непосредственно с файлами.
Программы оптимизации реестра, твикеры, а также инсталляторы и деинсталляторы программ работают через специальные функции работы с реестром.
Данный раздел содержит настройки текущего активного пользователя, вошедшего в систему. Здесь хранятся папки пользователя, цвета экрана и параметры панели управления. Эти сведения сопоставлены с профилем пользователя. Вместо полного имени раздела иногда используется аббревиатура HKCU. Хотя этот раздел выглядит как один из основных в редакторе реестра, он является всего лишь ссылкой на один из профилей HKEY_USERS\.
Раздел HKEY_USERS (псевдоним HKU) содержит информацию о профилях всех пользователей данного компьютера. Данный раздел практически никогда не используется пользователями. Следует отметить связь данного корневого раздела с разделом HKEY_CURRENT_USER, который фактически является ссылкой подраздела корневого раздела HKEY_USERS, хранящего сведения о текущем пользователе.
Раздел содержит параметры конфигурации, относящиеся к данному компьютеру (для всех пользователей). Вместо полного имени раздела иногда используется аббревиатура HKLM.
Является подразделом HKEY_LOCAL_MACHINE\Software\Classes. В основном, содержит информацию о зарегистрированных типах файлов и объектах COM и ActiveX. Вместо полного имени раздела иногда используется аббревиатура HKCR. Начиная с Windows 2000 эти сведения хранятся как в HKEY_LOCAL_MACHINE, так и в HKEY_CURRENT_USER. Раздел HKEY_LOCAL_MACHINE\Software\Classes содержит параметры по умолчанию, которые относятся ко всем пользователям локального компьютера. Параметры, содержащиеся в разделе HKEY_CURRENT_USER\Software\Classes, переопределяют принятые по умолчанию и относятся только к текущему пользователю. Раздел HKEY_CLASSES_ROOT включает в себя данные из обоих источников. Кроме того, раздел HKEY_CLASSES_ROOT предоставляет объединённые данные программам, написанным под ранние версии Windows. Изменения настроек текущего пользователя выполняются в разделе HKEY_CURRENT_USER\Software\Classes. Модификация параметров по умолчанию должна производиться в разделе HKEY_LOCAL_MACHINE\Software\Classes. Данные из разделов, добавленных в HKEY_CLASSES_ROOT, будут сохранены системой в разделе HKEY_LOCAL_MACHINE\Software\Classes. Если изменяется параметр в одном из подразделов раздела HKEY_CLASSES_ROOT и такой подраздел уже существует в HKEY_CURRENT_USER\Software\Classes, то для хранения информации будет использован раздел HKEY_CURRENT_USER\Software\Classes, а не HKEY_LOCAL_MACHINE\Software\Classes.
Данный раздел содержит сведения о профиле оборудования, используемом локальным компьютером при запуске системы. Является ссылкой на HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current
Данный раздел имеется только в реестре ОС семейства Windows 9x/ME. Содержит динамически изменяемые данные о компьютере (загрузка процессора, размер файла подкачки и т. п.).
Команда REG ADD добавляет в реестр системы Windows данные необходимого типа. Для удаления данных из реестра используется команда REG DELETE.
<раздел> [\\<компьютер>\]<путь> <компьютер> Имя удаленного компьютера, если оно опущено, то по умолчанию считается равным имени локального компьютера. На удаленных компьютерах доступны только разделы HKLM и HKU. <путь> Полный путь к разделу реестра в виде КОРЕНЬ\Подраздел. Значения [ HKLM | HKCU | HKCR | HKU | HKCC ]. <подраздел> Полный путь к разделу реестра в выбранном корневом разделе. /v Имя добавляемого параметра в указанном разделе. /ve Добавить пустой параметр (По умолчанию) в указанный раздел. /t Типы данных. [REG_SZ | REG_MULTI_SZ | REG_DWORD_BIG_ENDIAN | REG_DWORD | REG_BINARY | REG_DWORD_LITTLE_ENDIAN | REG_NONE | REG_EXPAND_SZ ] По умолчанию, считается равным REG_SZ. /s Определяет разделитель, который используется для разделения данных в многострочных параметрах типа REG_MULTI_SZ. По умолчанию считается равным "\0". /d Значение, присваиваемое добавляемому параметру реестра. /f Принудительно перезаписывать существующие записи реестра без предупреждения.
REG ADD \\ABC\HKLM\Software\MyCo Добавляет раздел HKLM\Software\MyCo на удаленный компьютер ABC REG ADD HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead Добавляет параметр с именем: Data, типом: REG_BINARY, и значением: fe340ead REG ADD HKLM\Software\MyCo /v MRU /t REG_MULTI_SZ /d fax\0mail Добавляет параметр с именем: MRU, типом: REG_MUTLI_SZ, и значением: fax\0mail\0\0 REG ADD HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d %%systemroot%% Добавляет параметр с именем: Path, типом: REG_EXPAND_SZ, и значением: %systemroot%. Примечание: Используйте в строке двойные символы процента ( %% )
Команда reg delete удаляет ключи в реестре операционной системы Windows.
REG DELETE <раздел> [/v <параметр> | /ve | /va] [/f] REG DELETE <раздел> Имя раздела в формате: [\\Компьютер\]Путь <компьютер> Имя удаленного компьютера, если оно опущено, то по умолчанию считается равным имени локального компьютера. Для удаленных компьютеров доступны только HKLM и HKU. <путь> Полный путь к разделу реестра в виде: КОРЕНЬ\Подраздел <КОРЕНЬ> Корневой раздел. Значения: [ HKLM | HKCU | HKCR | HKU | HKCC ] <подраздел> Полный путь к разделу реестра в выбранном корневом разделе. <параметр> Имя удаляемого параметра в указанном разделе. Если опущено, из указанного раздела будут удалены все подразделы и параметры. /ve Удалять безымянные параметры. /va Запрашивать все параметры данного раздела. /f Удалять принудительно, без дополнительного предупреждения.
Командная строка — команда REG DELETE.
REG DELETE HKLM\Software\MyCo\MyApp\Timeout Удаляет раздел реестра Timeout и все его подразделы и параметры. REG DELETE \\ZODIAC\HKLM\Software\MyCo /v MTU Удаляет параметр MTU из раздела MyCo реестра на компьютере ZODIAC.
Команда REG COMPARE сравнивает в реестре операционной системы Windows данные. Для копирования данных в реестре используется команда REG COPY.
<компьютер> Имя удаленного компьютера, если оно опущено, то по умолчанию считается равным имени локального компьютера. Для удаленных компьютеров доступны только HKLM и HKU. <путь> Полный путь к разделу реестра в виде: КОРЕНЬ\Подраздел. Если Подраздел2 не указан, он считается равным Подраздел1. <КОРЕНЬ> Корневой раздел. Значения: [ HKLM | HKCU | HKCR | HKU | HKCC ]. <подраздел> Полный путь к разделу реестра в выбранном корневом разделе. <параметр> Имя параметра в указанном разделе, для сравнения. Если опущен, будут сравниваться все параметры раздела. /ve Сравнивать безымянные параметры. /s Сравнивать все подразделы и параметры. <вывод> Одно из значений: [/oa | /od | /os | /on]. Если не указано, используется значение /od. /oa Выводить и совпадения, и отличия. /od Выводить только отличия. /os Выводить только совпадения. /on Не выводить результаты сравнения.
Код возврата:
0 — Успешно, сравниваемые данные идентичны
1 — При обработке произошла ошибка
2 — Успешно, сравниваемые данные отличаются
REG COMPARE HKLM\Software\MyCo\MyApp HKLM\Software\MyCo\SaveMyApp Сравнивает все параметры раздела MyApp с параметрами раздела SaveMyApp REG COMPARE HKLM\Software\MyCo HKLM\Software\MyCo1 /v Version Сравнивает значение параметра Version в разделах MyCo и MyCo1 REG COMPARE \\ZODIAC\HKLM\Software\MyCo \\. /s Сравнивает все подразделы и значения параметров в разделе HKLM\Software\MyCo реестра на компьютере ZODIAC с аналогичным разделом на локальном компьютере
Команда reg copy копирует ключи реестра операционной системы Windows. А для сравнения данных в реестре используется команда Reg Compare.
REG COPY <раздел1> <раздел2> [/s] [/f]
REG COPY <раздел> Имя раздела в формате: [\\Компьютер\]Путь <компьютер> Имя удаленного компьютера, если оно опущено, то по умолчанию считается равным имени локального компьютера. Для удаленных компьютеров доступны только HKLM и HKU. <путь> Полный путь к разделу реестра в виде: КОРЕНЬ\Подраздел. <КОРЕНЬ> Корневой раздел. Значения: [ HKLM | HKCU | HKCR | HKU | HKCC ]. <подраздел> Полный путь к разделу реестра в выбранном корневом разделе. /s Копировать все подразделы и параметры. /f Принудительное копирование без дополнительного предупреждения.
Способ хранения параметров и настроек операционной системы при помощи реестра Windows часто подвергается критике по следующим причинам: Реестр подвержен фрагментации, из-за чего доступ к реестру постепенно замедляется. В связи с тем, что, помимо настроек, в реестре хранится различная информация системы и приложений (например, многие приложения хранят в реестре список недавно открытых файлов), размер реестра значительно увеличивается по мере использования операционной системы. Эта проблема частично решается при помощи специальных утилит. Не все настройки системы хранятся в реестре, соответственно перенос настроек системы путём копирования реестра невозможен. Некоторые программы не могут работать без параметров, занесенных в реестр, что создаёт трудности при переносе их с компьютера на компьютер, или теряют данные после переустановки операционной системы. Реестр очень похож на виртуальную файловую систему, работающую поверх реальной файловой системы. При этом, как для файловой системы, реестр очень неустойчив к сбоям. Фактически один неверный байт в файле куста (ветки реестра, подобие корневой директории в файловых системах) приводит к сбою при попытке загрузки куста, и (для системных кустов) отказу операционной системы. Надёжность такого реестра никогда не будет выше надёжности файловой системы, на которой расположены его файлы. Однако версии Windows начиная с NT используют логи транзакций в качестве средства защиты от повреждений при обновлении реестра. Текущие версии Windows используют логи двух уровней для того, чтобы обеспечить целостность реестра в случае отказа питания или других подобных событий во время обновления реестра. Даже в случае ошибки, из-за которой невозможно восстановить реестр, Windows может починить и реинициализировать повреждённые записи реестра во время загрузки системы.
Критики приводят в пример UNIX-подобные операционные системы, где нет реестра и выполняемые им задачи решаются другими средствами.