Атомарность и восстановление ульев реестра
Реестр 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, 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
- Введение
- Историческая справка по реестру
- Неудобства работы с INI-файлами
- Назначение реестра
- Структура реестра
- Хранение данных реестра
- Атомарность и восстановление ульев реестра
- Сброс данных
- Проблема, связанная с размером реестра
- Ограничение по размеру реестра в Windows NT/2000
- Расширение возможностей реестра в Windows XP
- Когда следует браться за редактирование реестра?
- Альтернативы редактированию реестра
- Установка нового устройства
- Изменение конфигурации в Панели управления
- Другие инструментальные средства для изменения реестра
- Резюме
Глава 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. В ней применялись три различных типа файлов конфигурации.
- Системные файлы инициализации (system initialization files). При стандартном варианте установки Windows 3.1.x таких файлов было шесть: Control, ini, Progman.ini, Protocol.ini, System.ini, Win.ini и Winfile.ini.
- В файле Win.ini содержалась основная информация о программной конфигурации операционной системы, а также некоторые параметры, которые добавлялись прикладным программным обеспечением. В ранних версиях Windows каждое вновь устанавливаемое приложение вносило свои параметры в файл Win.ini. Таким образом, при установке на компьютере большого количества прикладных программ объем этого файла очень быстро рос, а поскольку на его размеры было установлено ограничение (не более 64 Кбайт), то добавление новых записей в его состав часто создавало проблему. Система Windows 3.1.V не информировала пользователя о том, что файл Win.ini достиг предельного размера, и все дальнейшие изменения, вносимые в последние разделы этого файла (за пределами инипиализационной границы), благополучно игнорировались. Именно по этой причине корпорация Microsoft рекомендовала разработчикам программного обеспечения хранить информацию, необходимую приложениям, в отдельных файлах — так называемых файлах инициализации приложений (private INI files).
- Файл System.ini служил основным хранилищем системной информации, относящейся к аппаратным средствам компьютера. Если в файле Win.ini хранилась информация, влияющая в основном на поведение системы, то в файле System.ini содержатась информация, которая указывала операционной системе на установленные аппаратные средства, драйверы устройств, загружаемые оболочки и т. д.
- Файл Progman.ini содержал инициализационные параметры Диспетчера программ (Windows Program Manager), а файл Winfile.ini — параметры инициализации Диспетчера файлов (Windows File Manager). Отсутствие этих файлов не мешало запуску Microsoft Windows (в отличие от файлов Win.ini и System.ini), однако в этом случае Диспетчер программ (Windows Program Manager) и Диспетчер файлов (Windows File Manager) запускались только в стандартной конфигурации, без каких бы то ни было индивидуачьных настроек. Что касается файла Control.ini, то в нем содержались установки Панели управления (Control Panel).
- Файл Protocol.ini был добавлен в состав Windows for Workgroups 3.Lv. Его назначение состояло в хранении инициатизационной информации для сетей Windows.
- Файлы инициализации приложений (private initialization files) представляли собой INI-файлы, добавляемые приложениями, которые устанавливались в системе. Эти файлы содФ°СХи другие установочные программы (для аппаратных и программных средств) добавляют в реестр новые конфигурационные данные. Начиная свою работу, все грамотно разработанные программы установки считывают информацию реестра, чтобы определить, присутствуют ли в системе компоненты, обязательные для успешного завершения установки. Наконец, благодаря наличию централизованного реестра приложения могут совместно использовать конфигурационную информацию и получают больше возможностей взаимодействия между собой. Приложение, претендующее на статус "Designed for Windows", должно активно использовать реестр, а также содержать специальную утилиту (uninstall utility), позволяющую корректно выполнить удаление этого приложения (рис. 1.1). Хранимая в реестре информация о приложениях помогает корректно выполнить эту процедуру, не удаляя компоненты (DLL, OCX и т. д.), которые могут использоваться другими программами.
Рис. 1.1. При удалении приложения из системы производится удаление параметров реестра, соответствующих удаляемому приложению
- Распознаватель (Recognizer). При каждом запуске компьютера под управлением Windows NT/2000/XP распознаватель аппаратных средств (Hardware Recognizer) помешает в реестр список обнаруженных им устройств. На компьютерах с процессорами Intel распознавание аппаратных средств осуществляется программой Ntdetect.com и ядром Windows NT/2000/XP (Ntoskrnl.exe).
- Ядро Windows NT/2000/XP (Windows NT/2000 Kernel). При старте системы ядро Windows NT/2000/XP извлекает из реестра сведения о загружаемых драйверах устройств и порядке их загрузки. Кроме того, программа Ntoskrnl.exe передает в реестр информацию о себе (примером такой информации может служить, в частности, номер версии). Компания Microsoft внесла значительные усовершенствования в ядро Windows XP, преимущественно направленные на повышение производительности и стабильности работы системы. Как будет показано ниже, к их числу относятся также и усовершенствования реестра (например, снятие ограничений размера реестра).
- Диспетчер РnР (PnP Manager), новый компонент режима ядра, появившийся в Windows 2000. Диспетчер РпР выполняет обнаружение устройств и их идентификацию по так называемому идентификатору поставщика (vendorId, vid) и идентификатору устройства (device Id, did). Комбинация этих двух чисел уникальным образом идентифицирует устройство. Обнаружив уникальную комбинацию vid и did. Диспетчер РnР запрашивает из реестра информацию о шине, на которой обнаружено устройство, и проверяет, установлен ли драйвер для этого устройства. Если драйвер устройства еще не установлен, то Диспетчер РnР информирует об этом подсистему РnР режима пользователя. Эта подсистема должна обнаружить подходящий INF-файл для инсталляции драйвера и начать его установку.
- Драйверы устройств. Драйверы устройств обмениваются с реестром параметрами загрузки и конфигурационными данными. Эти данные аналогичны строкам DEVICE=, которые можно найти в файле Config.sys для запуска компьютера под управлением MS-DOS. Драйвер устройства должен сообщить об используемых им системных ресурсах, включая аппаратные прерывания и каналы DMA. чтобы система могла включить эти данные в реестр. Приложения и драйверы устройств могут считывать эту информацию из реестра, предоставляя пользователям интеллектуальные средства установки и конфигурирования.
- Административные средства. Административные средства Windows NT/ 2000/ХР, в том числе утилиты из Панели управления (Control Panel) и программы из группы Administrative Tools представляют собой наиболее удобные и безопасные средства модификации реестра. Редактор реестра, рассмотрению которого посвящена глава 3, также полезен для его просмотра и, время от времени, для внесения изменений в конфигурацию системы. Однако, при работе с ним следует быть внимательными и осторожными.
- Пользовательские профили (user profiles). Windows NT/2000/XP обеспечивает создание множества пользовательских профилей. Вся информация, относящаяся к конкретной учетной записи пользователя и ассоциированным с ней правам, хранится в реестре. Более подробная информация о пользовательских профилях будет приведена в главе !0, здесь же отметим, что пользовательский профиль определяет индивидуальные параметры настройки дисплея, параметры сетевых соединений, принтеры и многое другое. Пользовательские профили бывают следующих типов: локальные (local user profile), создаваемые автоматически при первой регистрации пользователя на локальном компьютере, перемещаемые (roaming user profile), создаваемые администратором и хранящиеся на сервере, и обязательные (mandatory user profile) — перемещаемые профили, обязательные для применения. Информация о пользовательских профилях также хранится в реестре. Для управления пользовательскими профилями в Windows 2000 следует вызвать утилиту Система (System) из Панели управления (Control Panel) и перейти на вкладку Профили пользователей (User Profiles). Для управления пользовательскими профилями в Windows XP Professional следует запустить утилиту Система (System) из Панели управления (Control Panel), перейти на вкладкуДополнительно (Advanced) (рис. 1.2), и нажать кнопку Параметры (Settings) в группе Профили пользователей (User Profiles), чтобы открыть одноименное окно (рис. 1.3). В этом окне вы можете создавать новые пользовательские профили путем копирования существующих, удалять пользовательские профили или менять их типы (однако для этого необходимо зарегистрироваться на локальном компьютере от имени пользователя Администратор (Administrator)).
Рис. 1.2. Вкладка Дополнительно в окне Свойства системы
Рис. 1.3. ОкноПрофили пользователей
Рис. 1.4. Вкладка Оборудование окна Свойства системы
- Аппаратные профили (hardware profiles). Реестр в отличие от INI-файлов позволяет хранить множественные аппаратные конфигурации. Так, например, можно создать профили для док-станций (что актуально для пользователей портативных компьютеров), а также для съемных устройств. Аппаратный профиль представляет собой набор инструкций, с помощью которого можно указать операционной системе, драйверы каких устройств должны загружаться при запуске компьютера. Чтобы создать новый аппаратный профиль в Windows XP, следует дважды щелкнуть по значку утилиты Система (System) в окне Панели управления (Control Panel), перейти на вкладкуОборудование (Hardware) (рис. 1.4) и нажать кнопку Профили оборудования(Hardware Profiles). Откроется одноименное диалоговое окно, показанное на рис. 1.5. Так же как и при инсталляции Windows 2000, программа Setup в Windows XP создает стандартный аппаратный профиль, который включает в свой состав информацию обо всех аппаратных средствах, обнаруженных на компьютере в момент инсталляции.
Рис. 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. Корневые ключи реестра
Имя корневого ключа | Описание |
HKEY_LOCAL_MACHINE | Содержит глобальную информацию об аппаратных средствах и операционной системе, в том числе: тип шины, системная память, драйверы устройств и управляющие данные, используемые при запуске системы. Информация, содержащаяся в составе этого ключа, действует применительно ко всем пользователям, регистрирующимся в системе. На верхнем уровне иерархии реестра для этого ключа имеются три псевдонима: HKEY_CLASSES_ ROOT, HKEY_CURRENT_CONFIG и HKEY_DYN_ DATA |
HKEY_CLASSES_ROOT | Содержит ассоциации между приложениями и типами файлов (по расширениям имени файла). Кроме того, этот ключ хранит информацию OLE, ассоциированную с объектами СОМ, а также данные по ассоциациям файлов и классов (эквивалент реестра ранних версий Windows, служивших настройкой над MS-DOS). Параметры этого ключа совпадают с параметрами, расположенными под ключом HKEY_LOCAL_MACHINE \ Software \Classes. Подробную информацию о ключе HKEY_CLASSES_ROOT можно найти в руководстве "OLE Programmer's Reference", входящем в состав продукта Windows Platform Software Development Kit (SDK) |
HKEY_CURRENT_CONFIG | Содержит конфигурационные данные для текущего аппаратного профиля. Аппаратные профили (Hardware profiles) представляют собой наборы изменений, внесенных в стандартную конфигурацию сервисов и устройств, установленную данными ключей Software и System корневого ключа HKEY_LOCAL_MACHINE. В ключе HKEY_CURRENT CONFIG отражаются только изменения. Кроме того, параметры этого ключа появляются также под ключом HKEY_LOCAL_ MACHINE \Systern \ CurrentControlSet \HardwareProflies \Current |
HKEY_CURRENT_USER | Содержит профиль пользователя, на данный момент зарегистрированного в системе, включая переменные окружения, настройку рабочего стола, параметры настройки сети, принтеров и приложений. Этот ключ представляет собой ссылку на ключ HKEY_ USERS\user_ SID, где user SID — идентификатор безопасности (Security ID) пользователя, зарегистрированного в системе на текущий момент |
HKEY_USERS | Содержит все активно загруженные пользовательские профили, включая HKEY_ CURRENT_ USER, а также профиль по умолчанию. Пользователи, получающие удаленный доступ к серверу, не имеют профилей, содержащихся под этим ключом; их профили загружаются в реестры на собственных компьютерах. Windows NT/2000/XP содержит все активно загруженные пользовательские профили, включая HKEY_ CURRENT_ USER, а также пользовательский профиль по умолчанию (.DEFAULT). Пользователи, получающие удаленный доступ к серверу, не имеют профилей, содержащихся под этим ключом; их профили загружаются в реестры на собственных компьютерах |
Примечание
Как уже говорилось, концепция реестра впервые была введена в первой версии 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. Типы данных для параметров реестра
Тип данных | Описание |
REG_BINARY | Двоичные данные. Большинство аппаратных компонентов используют информацию, которая хранится в виде двоичных данных. Редакторы реестра отображают эту информацию в шестнадцатеричном формате |
REG_DWORD | Данные представлены в виде значения, длина которого составляет 4 байта. Этот тип данных используют многие параметры драйверов устройств и сервисов. Редакторы реестра могут отображать такие данные в двоичном, шестнадцатеричном и десятичном формате |
REG_EXPAND_SZ | Расширяемая строка данных. Она представляет собой текст, содержащий переменную, которая может быть заменена при вызове со стороны приложения |
REG_MULTI_SZ | Многострочное поле. Значения, которые фактически представляют собой списки текстовых строк, обычно имеют этот тип данных. Строки разделены символом NULL |
REG_SZ | Текстовая строка в формате, удобном для восприятия человеком. Значениям, представляющим собой описания компонентов, обычно присваивается именно этот тип данных |
REG_DWORD_LITTLE_ENDIAN | 32-разрядное число в формате "остроконечников" (little-endian). Представляет собой эквивалент типа REG_ DWORD. При использовании метода "остроконечников" самый младший байт ("little end") хранится в памяти первым в числе. Например, шестнадцатеричное число А02Вh по методу "остроконечников" сохраняется как 2ВА0. Метод "остроконечников" используется в микропроцессорах Intel |
REG_DWORD_BIG_ENDIAN | 32-разрядное число в формате "тупоконечников" (big endian). В противоположность методу "остроконечников", при использовании метода "тупоконечников" первым байтом числа оказывается самый старший байт ("big end") |
REG_LINK | Символическая ссылка Unicode. Этот тип данных предназначен для внутреннего использования. Тип данных REG_ LINK особенно интересен тем, что он позволяет одному элементу реестра ссылаться на другой ключ или параметр. Например, если элемент реестра \Rootl\Link имеет параметр типа REG_LINK со значением \Root2\RegKey, а ключ RegKey содержит параметр RegValue, то этот параметр идентифицируется двумя путями: \Rootl\Link\RegValue и \Root2\RegKey \RegValue. Windows NT/2000/XP активно использует этот метод — некоторые из корневых ключей реестра, перечисленных в табл. 1.1, являются ссылками на вложенные ключи других корневых ключей |
REG_NONE | Параметр не имеет определенного типа данных |
REG_DWORD | 64-разрядное значение |
REG_QWORD_LITTLE _ENDIAN | 64-разрядное число в формате "остроконечников". Эквивалент REG_ QWORD |
REG_RESOURCE_LIST | Список аппаратных ресурсов, применяется только в ветви HKEY_ LOCAL_ MACHINE \HARD WARE |
REG_FULL_RESOURCE _DESCRIPTOR | Дескриптор (описатель) аппаратного ресурса. Применяется только в ветви HKEY_ LOCAL_ MACHINEV HARDWARE |
REG_RESOUECE_ REQUIREMENTS_ LIST | Список необходимых аппаратных ресурсов. Применяется только в ветви HKEY_ LOCAL_ MACHINS\HARDWARE |
Хранение данных реестра
В 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