|
|
|
Что такое системный реестр и для чего он нужен?
Общее представление о реестре
Некоторые пользователи Windows точно знают, что системный реестр - это такая штука, которая предназначена для того, чтобы заставить пользователей и системных администраторов хорошенько понервничать. Но системный реестр - это только лишь иерархическая база данных с информацией о настройках определяющих конфигурацию операционной системы в целом и некоторых приложений.
Изначально (главным образом, в 16-битной версии Windows) та же информация, которая сейчас хранится в системном реестре, хранилась в текстовых файлах. Несмотря на то, что эти текстовые файлы были простыми, их организация делала доступ к содержащейся в них информации слишком медленным, чтобы отвечать требованиям все более и более ускоряющихся технологий.
Системный реестр: прошлое и настоящее
Развитие системного реестра, как и самой Windows, было постепенным. Системному реестру предшествовала пара псевдо-текстовых файлов, которые назывались win.ini и system.ini. Несмотря на то, что эффективность работы с этими файлами оставляла желать лучшего, они стали основой системного реестра.
Фактически эти два файла никуда не исчезли, они присутствуют в современных версиях Windows, несмотря на то, что они практически не менялись с Windows NT 4. Создание реестра явилось логическим продолжением борьбы с последствиями использования вышеописанных файлов: не эффективное взаимодействие (извлечение информации из псевдо-текстового ini. файла занимало много времени), проблема с размером файлов (ini. файлы могли разрастатьяся до слишком большого размера) и проблемы конфигурирования (организация ini. Файлов достаточно проста, если не сказать примитивна, что накладывает свои ограничения на возможности построения конфигураций).
Сегодня система Windows XP содержит .ini с небольшим количеством записей, данные файлы используют некоторые приложения для хранения настроек и даже сама операционная система (например boot.ini). Сегодня ini. файлы играют скорее вспомогательную роль (хотя в некоторых случаях и немало важную), а вот главную нишу в жизнеобеспечении Windows занимает системный реестр потому что он является сердцем и душой операционной системы. Без системного реестра Windows XP была бы не более чем коллекцией программ, неспособной выполнить даже самые базовые задачи, выполнения которых мы ожидаем от любой операционной системы. Каждый бит информации о конфигурации, которую имеет Windows, загружен в системный реестр. Информация об аппаратных средствах системы, настройках, безопасности и пользователях - все, что может быть установлено, установлено в нем. Однако времена менялись.
В Microsoft стали понимать, что если каждое приложение будет хранить специфичную для него информацию в системном реестре, то системный реестр может разрастись до огромных размеров. "Жадные" до ресурсов реестра приложения могли провоцировать поглощение львиной доли нерезедентного пула памяти для загрузки реестра, не оставляя пространства для маневра другим приложениям. В итоге вернулись к "проблеме с размером файла". Это не совсем то, что хотели в Microsoft, когда создавали структуру системного реестра.
Логическое решение заключалось в том, чтобы ограничить размер, до которого может разрастаться системный реестр. В более ранних версиях Windows данную опцию можно было задать вручную.
Изменения в реестре с более поздних версий Windows
Windows 2000 и более ранние версии устанавливают ограничения на размеры системного реестра. Если вы приблизитесь к своему пределу, то вы получите сообщение об этом. На практике, его размер ограничивался до 80% от объема нерезидентного пула памяти. Более ранние версии Windows регулируют размер системного реестра, в основном, по размеру установленной оперативной памяти. Чтобы создать очень большой системный реестр, нужно убедиться, что количество оперативной памяти достаточно и установлены записи Ограничения Размеров Системного Реестра и Размеров Выгружаемого Пула.
В Windows XP и Windows Server 2003 ограничение на размер системного реестра принципиально отсутствует. Представления файлов реестра теперь отображаются в адресном пространстве кэша компьютера. Поэтому, независимо от размера ветви реестра, он не занимает более 4-х мегабайт дискового пространства. Концепция реестра осталась прежней, но технология взаимодействия ОС и приложений с реестром, а также способ хранения реестра, существенно изменились.
Структура реестра
Системный реестр состоит из пяти основных секций. Эти секции называются кустами или ветвями, они похожи на папки вашего жесткого диска. У каждого куста, по определению, есть свое собственное место хранения (файл) и файл системного журнала. В случае необходимости, данный куст может быть восстановлен, не затрагивая другие кусты системного реестра. Внутри куста находятся разделы и подразделы (аналогично папкам и вложенным папкам вашего жесткого диска) и параметры. Термин "параметр" относится к информации или данным, заданным для раздела, создающим раздел, если продолжать аналогию, то это файл на вашем жестком диске. Раздел или подраздел может иметь ноль, один или больше параметров и от нуля до множества подразделов. Каждый параметр имеет имя, тип данных и значение: 1.Имя параметра сохраняется в качестве строки символов Unicode.
2.Тип данных параметра сохраняется как индекс целого числа.
Существует 11 типов данных системного реестра:
" REG_NONE. Тип данных "Неизвестный". Зашифрованные данные.
" REGSZ. Тип данных "Строковый". Текст.
" REG_EXPAND_SZ. Тип данных "Строковый". Текст и переменные.
" REG_BINARY. Тип данных "Двоичный". Двоичные данные.
" REG_DWORD. Тип данных "Числовой". Число.
" REG_DWORD_BIN_ENDIAN. Тип данных "Числовой". Число с обратным порядком байтов.
" REG_LINK. Тип данных "Строковый". Путь к файлу.
" REG_MULTI_SZ. Тип данных "Многостроковый". Массив строк.
" REG_RESOURCE_LIST. Тип данных "Строковый". Список ресурсов устройств.
" REG_FULL_RESOURCE_DESCRIPTOR. Тип данных "Строковый". Идентификатор ресурса устройства.
" REG_RESOURCE_REQUIREMENTS_LIST. Тип данных "Строковый". Идентификатор ресурса устройства.
3.Значение параметра зависит от типа данных. Оно может и не существовать изначально, а быть присвоенным по мере возникновения в этом необходимости.
И операционная система Windows , и приложения хранят данные в системном реестре Это и хорошо, и плохо. Хорошо, потому что системным реестром создается рациональное общее местоположение хранения. А плохо вот что: как упоминалось ранее, чем больше информации сохраняют приложения и система в системном реестре, тем больше он становится. Очень редко системный реестр становится меньше. Трудно найти хоть одно приложение, которое делало бы действительно полную работу по очищению всех собственных записей в системном реестре, когда это приложение деинсталлируется. Множество программ оставляет тонны хлама в системном реестре, когда они деинсталлируются, и очень для немногих приложений обычным процессом является очищение неиспользуемых записей. В конечном итоге, системный реестр со временем будет расти, как волшебный бобовый стебель Джека из сказки.
Кусты и Псевдонимы
Есть пять главных (или высших) уровней кустов в системном реестре Windows XP. Для каждого из них приняты следующие сокращения:
1.HKEY_CLASSES_ROOT - сокращенно HKCR.
2.HKEY_CURRENT_USER - сокращенно HKCU.
3.HKEY_LOCAL_MACHINE - сокращенно HKLM.
4.HKEY_USERS - сокращенно HKU.
5.HKEY_CURRENT_CONFIG - сокращенно HKCC.
Отметим, что в Windows 98 и Windows Millenium есть куст HKEY_DYN_DATA, который не имеет никакого сокращенного названия и отсутствует в Windows XP, хотя изначально в Microsoft намеревались включить информацию Plug and Play в данный куст. Так куда же сохранились данные Plug and Play, если куст HKEY_DYN_DATA исчез? Windows XP поддерживает Plug and Play, и Microsoft решили интегрировать данные Plug and Play в основную часть системного реестра вместо того, чтобы использовать отдельный куст.
Каждый куст начинается с HKEY_. HKEY_ - это сокращение для "раздела куста", хотя знание этого не слишком важно для понимания системного реестра. Н также означает, что это название является "рукоятью" (от англ. "handle" - рукоять) программы, посредством которой она может взаимодействовать с системным реестром. Эти "рукояти" установлены в файле winreg.h и включены в Windows XP SDK ("Software Development Kit" - Комплект Разработки Программного обеспечения).
Системный реестр содержит что-то вроде дублирования. Например, вы можете заметить, что все данные из HKEY_CURRENT_USER имеются также в кусте HKEY_USERS. Но это не два различных набора одной и той же информации; скорее, это два различных названия для одного и того же набора информации. Microsoft нужно было сделать так, чтобы некоторые части системного реестра казались находящимися в разных местах. Но они не хотели копировать эти секции, потому что впоследствии это могло бы создать проблемы с хранением обновлений каждой из этих двух секций. Вместо этого они создали псевдоним, или другое название, для некоторых компонентов системного реестра. Псевдоним указывает на реальный компонент и обновляется всякий раз, когда обновляется оригинал. Эти псевдонимы существуют только для Windows. Вы, как пользователь, не сможете создать псевдоним в системном реестре, как ни старайтесь!
Самым известным псевдонимом является куст системного реестра HKEY_CURRENT_USER. Если вы посмотрите на HKEY_USERS, то увидите там несколько разделов: один - это .DEFAULT, а другие - с названиями, состояими из множества символов. Это СИДы (индикаторы безопасности), которые Windows использует для идентификации пользователей. Название одного из этих подразделов во время входа пользователя в систему состоит только из СИДа, в то время как название другого - из СИДа с припиской в конце _Classes. Например, на одном сервере Windows у администратора есть два подраздела HKEY__USERS\S-1-5-21- 1004336348-842925246-1592369235-500 и HKEY_USERS\S-1-5-21-1004336348- 842925246-1592369235-500_Classes. Отметим, что пользователь по умолчанию, используемый, когда ни один из пользователей не входит в систему, имеет только один подраздел, называемый .DEFAULT.
В системном реестре имеются также и другие псевдонимы. Например, раздел системного реестра HKEY_LOCAL_MACHINE\_System\CurrentControlSet - это псевдоним для одного из наборов управления: ControlSet001, ControlSet002 или, иногда, ControlSet003. Опять же, волшебство здесь то же самое: объект системного реестра - один, просто он имеет два разных названия. Запомните: при изменении одного из разделов или подразделов системного реестра не надо удивляться, когда другой раздел или подраздел тоже изменится как по волшебству!
|