Атомарность и восстановление ульев реестра
Реестр 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. Далее технология и идеология (назначение) реестра уже не менялись. Все последующие версии Windows (NT 3.5, 95, NT 4.0, 98, 2000, XP, Vista, 7) использовали реестр как основную БД, содержащую все основные данные по конфигурации как самой ОС, так и прикладных программ. Далее менялись названия файлов реестра и их расположение, а также название и назначение ключей. Современный реестр Windows Реестр в том виде, как его использует Windows и как видит его пользователь в процессе использования программ работы с реестром, формируется из различных данных. Чтобы получилось то, что видит пользователь, редактируя реестр, происходит следующее. Вначале, в процессе установки и настройки Windows, на диске формируются файлы, в которых хранится часть данных относительно конфигурации системы. Затем, в процессе каждой загрузки системы, а также в процессе каждого входа и выхода каждого из пользователей, формируется некая виртуальная сущность, называемая «реестром» — объект REGISTRY\. Данные для формирования «реестра» частично берутся из тех самых файлов (Software, System …), частично из информации, собранной ntdetect при загрузке (HKLM\Hardware\Description). То есть часть данных реестра хранится в файлах, а часть данных формируется в процессе загрузки Windows. Для редактирования, просмотра и изучения реестра стандартными средствами Windows (программы regedit.exe и regedt32.exe) доступны именно ветки реестра. После редактирования реестра и/или внесения в него изменений эти изменения сразу записываются в файлы. Однако, есть программы сторонних разработчиков, которые позволяют работать непосредственно с файлами. Программы оптимизации реестра, твикеры, а также инсталляторы и деинсталляторы программ работают через специальные функции работы с реестром. Файлы реестра (Хранение данных реестра) Windows 95/98 § User.dat § System.dat Windows ME § Classes.dat § User.dat Windows 2000 Windows XP После установки Windows на диске в каталоге %SystemRoot%\System32\Config\ (например, C:\Windows\System32\Config\) хранятся следующие файлы: § system § software § sam § security § default (Все файлы (имена файлов) без расширений. Копия этих файлов хранится в каталоге C:\Windows\Repair\) Кроме того, файлы, используемые при построении «рабочей версии» реестра, могут храниться в каталогах: § %SystemDrive%\Documents and Settings\<Username>\ — файл «Ntuser.dat» § %SystemDrive%\Documents and Settings\<Username>\Local Settings\Application Data\Microsoft\Windows\ — файл «UsrClass.dat» Кроме этого, могут появляться и другие файлы реестра: userdiff (и userdiff.LOG), TempKey.LOG, и, возможно, другие [источник не указан 1250 дней] Можно провести некое примерное соответствие файлов и веток реестра, но оно не такое простое, полное и однозначное. Однако примерно можно сказать следующее: § Ветка реестра «HKEY_LOCAL_MACHINE\Software» формируется из файла «%SystemRoot%\system32\config\software». § Ветка реестра «HKEY_LOCAL_MACHINE\System\» формируется из файла «%SystemRoot%\system32\config\system». § Ветка реестра «HKEY_LOCAL_MACHINE\SAM\» формируется из файла «%SystemRoot%\system32\config\SAM». § Ветка реестра «HKEY_LOCAL_MACHINE\SECURITY\» формируется из файла «%SystemRoot%\system32\config\SECURITY». § Ветка реестра «HKEY_LOCAL_MACHINE\HARDWARE\» формируется в зависимости от оборудования(динамически). § Ветка реестра «HKEY_USERS\<SID_пользователя>» формируется из файлов «%USERPROFILE%\ntuser.dat» § Ветка реестра «HKEY_USERS\DEFAULT» формируется из файлов «%SystemRoot%\system32\config\default» [править]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» § 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». Windows CE/Mobile Описание разделов реестров HKEY_CURRENT_USER Данный раздел содержит настройки текущего активного пользователя, вошедшего в систему. Здесь хранятся папки пользователя, цвета экрана и параметры панели управления. Эти сведения сопоставлены с профилем пользователя. Вместо полного имени раздела иногда используется аббревиатура HKCU. Хотя этот раздел выглядит как один из основных в редакторе реестра, он является всего лишь ссылкой на один из профилей HKEY_USERS\. HKEY_USERS Раздел HKEY_USERS (псевдоним HKU) содержит информацию о профилях всех пользователей данного компьютера. Данный раздел практически никогда не используется пользователями. Следует отметить связь данного корневого раздела с разделом HKEY_CURRENT_USER, который фактически является копией подраздела корневого раздела HKEY_USERS, хранящего сведения о текущем пользователе. HKEY_LOCAL_MACHINE Раздел содержит параметры конфигурации, относящиеся к данному компьютеру (для всех пользователей). Вместо полного имени раздела иногда используется аббревиатура HKLM. HKEY_CLASSES_ROOT Является подразделом 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_CURRENT_CONFIG Данный раздел содержит сведения о профиле оборудования, используемом локальным компьютером при запуске системы. Является ссылкой на HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current HKEY_DYN_DATA Данный раздел имеется только в реестре ОС семейства Windows 9x/ME. Содержит динамически изменяемые данные о компьютере (загрузка процессора, размер файла подкачки и т. п.).[2] Критика Способ хранения параметров и настроек операционной системы при помощи реестра Windows часто подвергается критике по следующим причинам: § Реестр подвержен фрагментации, из-за чего доступ к реестру постепенно замедляется § В связи с тем, что помимо настроек в реестре хранится различная информация системы и приложений (например, многие приложения хранят в реестре список недавно открытыхфайлов), размер реестра значительно увеличивается по мере использования операционной системы. Эта проблема частично решается при помощи специальных утилит § Не все настройки системы хранятся в реестре, соответственно перенос настроек системы путём копирования реестра невозможен § Некоторые программы не могут работать без параметров, занесенных в реестр, что создаёт трудности при переносе их с компьютера на компьютер, или теряют данные после переустановки операционной системы. Критики приводят в пример UNIX-подобные операционные системы, где нет реестра и выполняемые им задачи решаются другими средствами. Лже-оптимизаторы и дефрагментаторы реестра Существуют активно и недобросовестно рекламируемые программы, обещающие в числе прочего оптимизацию работы реестра. Они могут использоваться как для получения прибыли от продажи по необоснованно высокой цене, так и для распространения вирусов. Терминология В описании реестра в английской литературе, среди прочих, используется термин Hive. В некоторых работах его переводят на русский как «улей». Microsoft в своих документах переводит это как куст. Например: Registry hive HKEY_LOCAL_MACHINE\SAM == Куст реестра HKEY_LOCAL_MACHINE\SAM Древо реестра — это подмножество разделов, подразделов и параметров реестра, которому сопоставлен набор вспомогательных файлов, содержащих резервные копии этих данных.
Глава 1 Обзор реестра Windows XP Данная книга адресована системным администраторам, специалистам по технической поддержке и опытным пользователям Windows XP, а большинство читателей этого круга наверняка уже знакомы с понятием реестра. Прототип современного реестра существовал еще в Windows 3.1, и многие программисты уже в те времена знали, что конкретно их собеседник имеет в виду, заводя разговор о реестре. Среди пользователей тема реестра стапа популярной после выпуска операционной системы Windows 95. Это не удивительно, поскольку реестр является важнейшей частью любой современной операционной системы семейства Windows. В данной главе приводится обзорная информация по реестру Windows NT/2000/XP, дается описание его структуры и типов данных, а также анализируются методы хранения данных реестра Windows XP. К сожалению, ограниченный объем книги не позволяет подробно остановиться на анализе отличий между реестрами Windows 95/98/ME и Windows NT/2000/XP. Однако, основные отличия будут указаны по ходу изложения материала.
Введение Не приходилось ли вам попадать в ситуацию, когда необходимо срочно выполнить работу, но на экране появляется странное и пугающее сообщение о том, что операционная система не может быть загружена, т. к. ее реестр поврежден? Например, многие пользователи Windows NT 4.0 испытывали этот шок. когда в процессе загрузки получали сообщение следующего вида: OS Loader V 4.0
.... Windows NT could not start because the following file is missing or corrupt: \WINNT\SYSTEM32\CONFIG\SYSTEM You can attempt to repair this file by Starting Windows NT Setup using the original Setup floppy disk or CD-ROM. Select 'r' at the first screen tc repair. Почти такое же сообщение может появиться и в Windows 2000, а также в Windows XP: Не удается запустить Windows из-за испорченного или отсутствующего файла: \WIMDOWS'\SYSTEM32\CONFIG\SYSTEM Можно попробовать восстановить этот файл, запустив программу установки Windows с оригинального установочного CD-ROM. Выберите 'r' в первом диалоговом экране для запуска процедуры восстановления. Приведенные примеры наглядно показывают, что единственная ошибка в системном реестре (файл System содержит именно информацию реестра) может повлиять на всю конфигурацию и даже сделать невозможным запуск операционной системы. Более того, добиться корректной работы некоторых приложений можно также лишь путем редактирования реестра. Именно поэтому важность знаний о реестре и практических навыков работы с ним нельзя недооценивать. Реестр довольно сложен для расшифровки и понимания, однако он представляет собой важную часть любой современной операционной системы семейства Windows, без которой она просто не сможет работать. Что же такое реестр? Это централизованная база данных, которая хранит все параметры настройки системы и работающих в ней приложений. В этом смысле реестр аналогичен разнообразным INI-файлам, а также файлам Autoexec.bat и Config.sys, используемых в ранних версиях Windows. Помимо этого, в реестре хранится информация обо всех имеющихся на компьютере аппаратных средствах, включая устройства Plug and Play, системную информацию OLE, а также сведения о связях расширений имен файлов. Реестр содержит все данные о приложениях, поддерживающих Plug and Play и OLE, информацию о конфигурации сетевых параметров, аппаратные профили и профили пользователей. Подводя итоги, скажем: если на компьютере имеется программный или аппаратный компонент, который так или иначе влияет на его работу, то практически наверняка можно утверждать, что информация об этом компоненте хранится в системном реестре.
Историческая справка по реестру Сама по себе концепция реестра не нова для Windows. Однако современный реестр — это гигантский шаг вперед в достижении управляемости всей системы в целом из единого источника — регистрационной базы данных (registry database). Эта база данных разрабатывалась как основа всех сетевых, системных и пользовательских параметров настройки Windows. Первой операционной системой семейства Windows, получившей широкое распространение и пользовавшейся коммерческим успехом, была система Microsoft Windows 3.1. В ней применялись три различных типа файлов конфигурации.
Рис. 1.1. При удалении приложения из системы производится удаление параметров реестра, соответствующих удаляемому приложению
Рис. 1.2. Вкладка Дополнительно в окне Свойства системы Рис. 1.3. ОкноПрофили пользователей
Рис. 1.4. Вкладка Оборудование окна Свойства системы
Рис. 1.5. Окно Профили оборудования
Структура реестра Для понимания логической структуры реестра проще всего провести аналогию со структурой файловой системы на диске. Реестр содержит ключи (keys), которые аналогичны каталогам, и параметры (values), которые можно сравнить с файлами, хранящимися на диске. Ключи реестра представляют собой контейнеры, в составе которых могут содержаться как вложенные ключи (subkeys), так и параметры. Параметры реестра (как и файлы) содержат данные. Ключи, находящиеся на верхнем уровне этой иерархической структуры, называются корневыми ключами (root keys). Рис. 1.6. Иерархическая структура реестра Схема именования ключей и параметров реестра также заимствуется от схемы именования путей к файлам и каталогам, принятой для файловой системы. Сравните, например, типичный путь к каталогу (WORK\BHV) и типичный путь к вложенному ключу реестра (HKEY_LOCAL_MACHINE\SYSTEM \Current.GontrolSet). Реестр Windows 2000/XP содержит 5 коревых ключей: HKEY_CLASSES_ROOT, HKEY_GURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS И HKEY_CURREKT_CONFIG. На рис. 1.6 проиллюстрирована иерархическая структура реестра. Все имена корневых ключей начинаются со строки HKEY_, что указывает разработчикам программного обеспечения на то. что это — дескриптор, который может использоваться программой. Дескриптор (handle) — это значение, применяемое для уникального описания ресурса, к которому программа может получить доступ. Описания корневых ключей реестра Windows NT/2000/XP приведены в табл. 1.1. Таблица 1.1. Корневые ключи реестра
Примечание Как уже говорилось, концепция реестра впервые была введена в первой версии Windows NT— Windows NT 3.1. Реестры Windows 9x/ME берут начало от этой первой версии. Однако на текущий момент между реестрами Windows 9х/МЕ и Windows NT/2000/XP существуют серьезные различия. Наиболее очевидное из них заключается в том, что реестр Windows 95/98/ME имеет еще один ключ верхнего уровня — HKEY_DYN_DATA. Этот ключ содержит информацию о системе, которую операционные системы Windows 9x/ME должны постоянно "держать наготове", поскольку она может потребовать оперативного обновления. Эту информацию реестра Windows 9x/ME хранит в оперативной памяти, не записывая на жесткий диск. Ключ HKEY_DYN_DATA имелся во всех бета-версиях, но при попытке его открыть всегда появлялось сообщение об ошибке. В настоящее время, утилиты Regedit.exe и Regedt32.exe в Windows 2000 и Редактор реестра (Registry Editor) Windows XP (Regedit.exe) не показывают этот ключ. Данные реестра поддерживаются в виде параметров, расположенных под ключами реестра. Каждый параметр характеризуется именем, типом данных и собственно значением. Три части параметра реестра всегда располагаются в следующем порядке: В табл. 1.2 перечислены типы данных, определенные и используемые в системе Windows NT/2000/XP. Таблица 1.2. Типы данных для параметров реестра
Хранение данных реестра В Windows NT/2000/XP элементы реестра хранятся в виде атомарной структуры. Реестр подразделяется на составные части, которые разработчики этой операционной системы назвали ульями [ В версиях Windows NT/2000/XP, локализованных на русский язык, эти компоненты были названы "кустами", что не совсем точно отражает их природу. В оригинальных версиях Windows NT/2000/XP атомарные компоненты структуры реестра называются ульями (hives). Этот термин был введен разработчиками Microsoft с тем, чтобы подчеркнуть сходство структуры реестра с ячеистой структурой пчелиного улья. С точки зрения автора, этот термин является более удачным.] (hives) по аналогии с ячеистой структурой пчелиного улья. Улей представляет собой дискретную совокупность ключей, вложенных ключей и параметров, берущую начало в вершине иерархии реестра. Отличие ульев от других групп ключей состоит в том, что они являются постоянными компонентами реестра. Ульи не создаются динамически при загрузке операционной системы и не удаляются при ее остановке. Таким образом, ключ HKEY_LOCAL_MACHINE\HARDWARE, который строится динамически распознавателем аппаратных средств при запуске системы, ульем не является. Примечание Так же, как в Windows 2000, реестр Windows XP размещается на диске в виде набора файлов, именуемых ульями, которые служат хранилищем данных о конфигурации системы. В Windows XP программный код реестра переработан для обеспечения более высокой производительности. Это не повлияло на приложения, поскольку в данной ситуации используются существующие программные интерфейсы программирования (API). Усовершенствования реестра Windows XP направлены главным образом на повышение производительности. Далее в этой главе мы рассмотрим их более подробно. Данные ульев реестра хранятся в файлах, которые размещаются в каталогах %SystemRoot%\System32\Conug и %SystemRoot9S\Prou\es\Username (Windows NT 4.0) и %SystemRoot%\System32\Conug и % System Drive%\Documents and Settmgs\Usemame (Windows 2000). Каждый улей реестра Windows NT/2000/XP ассоциирован с набором стандартных файлов. В табл. 1.3 перечислены стандартные ульи реестра Windows NT/2000/XP и поддерживающие их файлы. Таблица 1.3. Стандартные файлы, обеспечивающие поддержку ульев реестра Windows NT/2000/XP
(0.017 сек.) |