Kaja Kallas

Реестр Windows (англ. Windows Registry), или системный реестр — иерархически построенная база данных параметров и настроек в операционных системах Microsoft Windows.

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

Реестр Windows был создан с целью систематизации информации, ранее размещённой во многих файлах с расширением INI, введение которого в реестр позволило создать единый механизм доступа (API) для записи и чтения настроек, а также устранить проблемы, связанные с короткими именами файлов, отсутствием дифференциации параметров, правами доступа и низкой производительностью при работе с файловой системой FAT16. Эта система, имеющая ограничения при поиске файлов в больших каталогах, в конечном итоге уступила место более эффективной файловой системе NTFS, что привело к исчезновению первоначальных причин использования реестра. Однако реестр по-прежнему важен благодаря поддержке обратной совместимости и остаётся неотъемлемой частью всех версий операционной системы Windows, включая последнюю.

Microsoft Windows, а также альтернативные операционные системы, такие как ReactOS и eComStation, остаются единственными системами, которые продолжают применять механизм реестра для управления настройками операционной системы.

История возникновения и развития реестра

Реестр Windows 3.1

Сам реестр как древовидная иерархическая база данных (registration database — регистрационная база) впервые появился в Windows 3.1 (апрель 1992). Это был всего один двоичный файл, который назывался REG.DAT и хранился в каталоге C:\Windows\. Реестр Windows 3.1 имел только одну ветку HKEY_CLASSES_ROOT. Он служил для связи DDE, а позднее и OLE-объектов.

Одновременно c появлением реестра в Windows 3.1 появилась программа REGEDIT.EXE для просмотра и редактирования реестра.

Первый реестр уже имел возможность импорта данных из *.REG-файлов. В базовой поставке шёл файл SETUP.REG, содержащий данные по основным расширениям и типам файлов.

Реестр Windows 3.1 имел ограничение на максимальный размер файла REG.DAT — 64 Кбайт. Если реестр превышал этот размер, файл реестра (REG.DAT) приходилось удалять и собирать заново либо из *.REG-файлов либо вводить данные вручную.

Реестр Windows NT 3.1

Следующий шаг был сделан в Windows NT 3.1 (июль 1993). Произошёл отказ от устаревших файлов MS-DOS: AUTOEXEC.BAT и CONFIG.SYS, а также от INI-файлов как от основных файлов конфигурации. На «регистрационную базу» (реестр) была переведена вся конфигурация системы. Основой конфигурации системы стал реестр. Он имел 4 корневых раздела: HKEY_ LOCAL_MACHINE, HKEY_CURRENT_USER, HKEY_CLASSES_ROOT и HKEY_USERS.

Реестр стал «сборным»: на диске он хранился в файлах: DEFAULT, SOFTWARE, SYSTEM, а при запуске системы из этих файлов собиралась единая БД.

В комплекте поставки оставался файл REGEDIT.EXE, который по-прежнему позволял просматривать и редактировать только ветку HKEY_CLASSES_ROOT, и появился файл REGEDT32.EXE, который редактировал все ветки реестра.

Далее технология и назначение реестра уже не менялись. Все последующие версии Windows начиная с NT 3.5 использовали реестр как основную БД, содержащую все основные данные по конфигурации как самой ОС, так и прикладных программ. Далее менялись названия файлов реестра и их расположение, а также название и назначение ключей.

Файлы реестра (Хранение данных реестра)

Windows 95/98

  • User.dat
  • System.dat

Windows ME

  • Classes.dat
  • User.dat

Windows 2000

В Windows 2000 количество кустов реестра осталось таким же, как и в Windows NT 5.0.

5 кустов, один из которых является ссылкой на раздел в HKEY_USERS. Сам куст называется HKEY_CURRENT_USER

Windows XP

в Windows XP файлы реестра хранятся в следующих местах:

  • 03= Ветка реестра «HKEY_LOCAL_MACHINE\SYSTEM» формируется из файла «%SystemRoot%\System32\config\SYSTEM»
  • 04= Ветка реестра «HKEY_LOCAL_MACHINE\SOFTWARE» формируется из файла «%SystemRoot%\System32\config\SOFTWARE»
  • 05= Ветка реестра «HKEY_LOCAL_MACHINE\SECURITY» формируется из файла «%SystemRoot%\System32\config\SECURITY»
  • 06= Ветка реестра «HKEY_LOCAL_MACHINE\SAM» формируется из файла «%SystemRoot%\System32\config\SAM»
  • 07= Ветка реестра «HKEY_USERS\.DEFAULT» формируется из файла «%SystemRoot%\System32\config\DEFAULT»
  • 09= Ветка реестра «HKEY_USERS\S-1-5-19» формируется из файла «%SystemDrive%\Documents and Settings\LocalService\NTUSER.DAT»
  • 10= Ветка реестра «HKEY_USERS\S-1-5-20» формируется из файла «%SystemDrive%\Documents and Settings\NetworkService\NTUSER.DAT»
  • 11= Ветка реестра «HKEY_USERS\<SID_пользователя>» формируется из файла «%SystemDrive%\Documents and Settings\<Папка пользователя>\NTUSER.DAT»
  • 12= Ветка реестра «HKEY_USERS\<SID_пользователя>_Classes» формируется из файла «%SystemDrive%\Documents and Settings\<Папка пользователя>\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat»

Windows Vista

В Windows Vista файлы реестра хранятся там же, где и в Windows XP.

Windows 7

В Windows 7, согласно сведениям из HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist, файлы реестра хранятся в следующих местах:

  • 01= Ветка реестра «HKEY_LOCAL_MACHINE\HARDWARE» формируется в зависимости от оборудования (динамически);
  • 02= Ветка реестра «HKEY_LOCAL_MACHINE\BCD00000000» формируется из файла «%SystemRoot%\Boot\BCD»
  • 03= Ветка реестра «HKEY_LOCAL_MACHINE\SYSTEM» формируется из файла «%SystemRoot%\System32\config\SYSTEM»
  • 04= Ветка реестра «HKEY_LOCAL_MACHINE\SOFTWARE» формируется из файла «%SystemRoot%\System32\config\SOFTWARE»
  • 05= Ветка реестра «HKEY_LOCAL_MACHINE\SECURITY» формируется из файла «%SystemRoot%\System32\config\SECURITY»
  • 06= Ветка реестра «HKEY_LOCAL_MACHINE\SAM» формируется из файла «%SystemRoot%\System32\config\SAM»
  • 07= Ветка реестра «HKEY_USERS\.DEFAULT» формируется из файла «%SystemRoot%\System32\config\DEFAULT»
  • 08= Ветка реестра «HKEY_USERS\S-1-5-18» формируется из файла «%SystemRoot%\System32\config\systemprofile\NTUSER.DAT» (относится к учётной записи system)[1]
  • 09= Ветка реестра «HKEY_USERS\S-1-5-19» формируется из файла «%SystemRoot%\ServiceProfiles\LocalService\NTUSER.DAT» (относится к учётной записи LocalService)
  • 10= Ветка реестра «HKEY_USERS\S-1-5-20» формируется из файла «%SystemRoot%\ServiceProfiles\NetworkService\NTUSER.DAT» (относится к учётной записи NetworkService)
  • 11= Ветка реестра «HKEY_USERS\<SID_пользователя>» формируется из файла «%USERPROFILE%\NTUSER.DAT», где под %USERPROFILE% подразумевается путь к папке соответствующего пользователя.
  • 12= Ветка реестра «HKEY_USERS\<SID_пользователя>_Classes» формируется из файла «%USERPROFILE%\AppData\Local\Microsoft\Windows\UsrClass.dat»

Резервные копии файлов реестра DEFAULT, SAM, SECURITY, SOFTWARE и SYSTEM находятся в папке «%SystemRoot%\System32\config\RegBack». Само резервное копирование производится силами Планировщика задач в 0 ч. 00 мин. каждые 10 дней по заданию «RegIdleBackup», расположенному в иерархии задач по пути «\Microsoft\Windows\Registry».

Ветка реестра «HKEY_CURRENT_USER» формируется из файла «%USERPROFILE%\NTUSER.DAT», где под %USERPROFILE% подразумевается путь к папке текущего пользователя.

Реестр 64-разрядных версий Windows XP и Windows Server 2003 и Windows Vista подразделяется на 32- и 64-разрядные разделы. Большинство 32-разрядных разделов имеет те же имена, что и их аналоги в 64-разрядном разделе, и наоборот. По умолчанию редактор реестра 64-разрядных версий Windows XP, Windows Server 2003 и Windows Vista отображает 32-разрядные разделы в узле HKEY_LOCAL_MACHINE\Software\WOW6432Node.

Описание разделов реестров

HKEY_CURRENT_USER

Данный раздел содержит настройки текущего активного пользователя, вошедшего в систему. Здесь хранятся папки пользователя, цвета экрана и параметры панели управления. Эти сведения сопоставлены с профилем пользователя. Вместо полного имени раздела иногда используется аббревиатура HKCU[2]. Хотя этот раздел выглядит как один из основных в редакторе реестра, он является всего лишь ссылкой на один из профилей HKEY_USERS\.

HKEY_USERS

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

HKEY_LOCAL_MACHINE

Раздел содержит параметры конфигурации, относящиеся к данному компьютеру (для всех пользователей). Вместо полного имени раздела иногда используется аббревиатура HKLM[2].

HKEY_CLASSES_ROOT

Является подразделом HKEY_LOCAL_MACHINE\Software\Classes. В основном, содержит информацию о зарегистрированных типах файлов и объектах COM и ActiveX. Вместо полного имени раздела иногда используется аббревиатура HKCR. Начиная с Windows 2000 эти сведения хранятся как в LOCAL_MACHINE, так и в CURRENT_USER. Раздел HKLM\Software\Classes содержит параметры по умолчанию, которые относятся ко всем пользователям локального компьютера. Параметры, содержащиеся в разделе HKCU\Software\Classes, относятся только к текущему пользователю, имея приоритет над стандартными. Раздел CLASSES_ROOT включает в себя данные из обоих источников. Кроме того, раздел CLASSES_ROOT предоставляет объединённые данные программам, написанным под ранние версии Windows. Изменения настроек текущего пользователя выполняются в разделе HKCU\Software\Classes. Модификация параметров по умолчанию должна производиться в разделе HKLM\Software\Classes. Данные из разделов, добавленных в CLASSES_ROOT, будут сохранены системой в разделе HKLM\Software\Classes. Если изменяется параметр в одном из подразделов раздела CLASSES_ROOT и такой подраздел уже существует в HKCU\Software\Classes, то для хранения информации будет использован раздел HKCU\Software\Classes, а не аналогичный раздел в LOCAL_MACHINE[2].

HKEY_CURRENT_CONFIG

Данный раздел содержит сведения о профиле оборудования, используемом локальным компьютером при запуске системы[2]. Является ссылкой на HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current

HKEY_DYN_DATA

Данный раздел имеется только в реестре ОС семейства Windows 9x/ME. Содержит динамически изменяемые данные о компьютере (загрузка процессора, размер файла подкачки и т. п.)[2].

Критика

Способ хранения параметров и настроек операционной системы при помощи реестра Windows часто подвергается критике по следующим причинам:

  • Реестр хранится в небольшом количестве объёмных (по нескольку сотен мегабайт) файлов, вследствие чего высока вероятность повреждения данных. Также большие файлы подвержены фрагментации, что замедляет доступ к реестру на обычных жёстких дисках (твердотельные накопители решают эту проблему).
  • В связи с тем, что, помимо настроек, в реестре хранится различная информация системы и приложений (например, многие приложения хранят в реестре список недавно открытых файлов), размер реестра значительно увеличивается по мере использования операционной системы. Эта проблема частично решается при помощи специальных утилит.
  • Не все настройки системы хранятся в реестре, соответственно, перенос настроек системы путём копирования реестра невозможен.
  • Некоторые программы не могут работать без параметров, занесённых в реестр, что создаёт трудности при переносе их с компьютера на компьютер, или теряют данные после переустановки операционной системы.
  • Реестр очень похож на виртуальную файловую систему, работающую поверх реальной файловой системы. При этом, как для файловой системы, реестр очень неустойчив к сбоям. Фактически один неверный байт в файле куста (ветки реестра, подобие корневому каталогу в файловых системах) приводит к сбою при попытке загрузки куста, и (для системных кустов) отказу операционной системы. Надёжность такого реестра никогда не будет выше надёжности файловой системы, на которой расположены его файлы. Однако версии Windows начиная с NT используют логи транзакций в качестве средства защиты от повреждений при обновлении реестра. Текущие версии Windows используют логи двух уровней для того, чтобы обеспечить целостность реестра в случае отказа питания или других подобных событий во время обновления реестра[3]. Даже в случае ошибки, из-за которой невозможно восстановить реестр, Windows может починить и инициализировать повреждённые записи реестра во время загрузки системы[3].

Критики приводят в пример UNIX-подобные операционные системы, где нет реестра и выполняемые им задачи решаются другими средствами.

Терминология

В описании реестра в английской литературе, среди прочих, используется термин Hive (куст в официальной документации Microsoft)[2][4]

Куст реестра — это подмножество разделов, подразделов и параметров реестра, которому сопоставлен набор вспомогательных файлов, содержащих резервные копии этих данных[2].

Примечания

  1. Хорошо известные идентификаторы безопасности в операционных системах Windows. Дата обращения: 14 мая 2011. Архивировано 4 марта 2015 года.
  2. 1 2 3 4 5 6 7 Сведения о реестре Windows для опытных пользователей. Дата обращения: 27 октября 2007. Архивировано 13 октября 2007 года.
  3. 1 2 Ionescu, Mark Russinovich, David A. Solomon, Alex. Registry Internals // Windows internals (неопр.). — 6th ed.. — Redmond, Wash.: Microsoft Press[англ.]. — ISBN 978-0-7356-4873-9.
  4. Windows registry information for advanced users. Дата обращения: 27 октября 2007. Архивировано 16 мая 2008 года.

Ссылки

No tags for this post.