Введение в реестр Windows XP Тема реестра очень популярна в литературе, посвященной ОС Windows. Большинство авторов посвящают одну или несколько своих статей этой тематике. Я сдерживался довольно долго, но в конце концов не избежал соблазна и написал эту статью. По ходу своего повествования я постараюсь "не свалиться" ни в механическое перечисление значений всяких полезных ключей, ни в сухое теоретизирование, свойственное официальным публикациям "Майкрософт", посвященным этой теме. Это страшное слово реестр... Для начала хочу вас заверить в том, что нигде в Windows нет никакого такого "сторожа", который постоянно следил бы за вами и говорил: "Ага! Мой-то, гляди, в реестр лазил! Счас я ему за это покажу, где раки зимуют!" Если вы не будете бездумно изменять значения ключей, предназначение которых вам неизвестно, то ничего страшного с вашей системой не случится. Реестр ? это база данных настроек Windows. Свои настройки ОС ищет по именам папок и ключей. Из этого обстоятельства вытекает несложный логический вывод. Не нужно без явной на то причины модифицировать уже имеющиеся ключи и папки. Если вам хочется потренироваться, создавайте в этих уже имеющихся папках реестра Windows свои дополнительные папки и ключи. Так как система не знает о существовании созданных вами папок, ей глубоко безразлично их значение и даже существуют ли они вообще в природе. Вы можете спокойно экспериментировать. Создавайте и удаляйте ключи, не боясь разрушить функционирование системы. Поступайте так до тех пор, пока не научитесь свободно обращаться с редактором реестра. Вопросы терминологии Язык, как известно, определяет то, о чем мы можем помыслить. Немалую толику загадочности реестру придает отсутствие адекватной русской терминологии, описывающей различные его составляющие. В дальнейшем своем повествовании я планирую для рассказа об элементах реестра использовать по возможности именно такую ассоциативную терминологию "папок" и "файлов". Как русскоязычный человек я с трудом удерживаюсь от смеха, представляя себе "кусты", на "ветвях" которых развешаны "ключи". Ничуть не лучше и практикуемая многими изданиями терминология из разряда пчеловодства. Перемудрили тут слегка, на мой взгляд, переводчики из "Майкрософт". Реестр как аналог логического диска По своей идеологии реестр очень похож на обычный логический диск. Тот самый диск с папками, на котором вы храните свою коллекцию музыки и картинок. Подобно обычному диску, реестр имеет свою корневую папку. Из этой папки вырастает целое дерево других ? вложенных ? папок. В эти вложенные папки, в свою очередь, опять-таки, могут быть вложены уже другие папки, и так до бесконечности. Роль файлов в реестре выполняют так называемые "ключи". Ключ ? это именованный набор информации. Продолжая аналогию с файлом, можно сказать, что название ключа играет роль имени файла, а значение этого ключа ? роль содержимого этого файла. Типы данных, хранящихся в реестре Подобно тому, как файлы хранят информацию различного типа, так и ключи в реестре подразделяются по типу информации, которая в них хранится. Есть ключи, которые хранят текстовые строки подобно обычным текстовым файлам. Есть ключи, в которых хранятся бинарные данные, есть ключи для хранения чисел. Давайте я вам перечислю наиболее популярные типы данных ключей реестра. REG_BINARY Наиболее "универсальный" тип данных в реестре и, вместе с тем, наиболее похожий на 1 обычный файл на логическом диске. Хранящиеся в нем данные представляют собой последовательность байт. Интерпретация этой последовательности полностью возлагается на ту программу, которая зачем-либо хранит данные в таком виде. Редактор реестра предоставляет для изменения значения этого поля типичный редактор бинарных файлов. Слева шестнадцатеричное значение байт, справа символьное представление тех же самых байт. REG_DWORD, REG_QWORD Данные типы данных являются числами, отличающимися друг от друга максимальным размером сохраняемых значений. Если вы программист, то и без меня догадаетесь, что это означает. Если же вы не программист, то вам это знать и не обязательно. При редактировании этих типов данных вам, вероятнее всего, будет предоставлен редактор, позволяющий указывать десятичное, шестнадцатеричное или двоичное значение. Выбираете наиболее удобную для вас систему исчисления и изменяете то число, которое хранится в этом ключе. Да, вот еще, чуть не забыл. Существует еще несколько разновидностей этих ключей. Называются они так же, но имеют суффикс BIG_ENDIAN или LITTLE_INDIAN ? например: REG_ QWORD_BIG_ENDIAN. Если вы вдруг на них наткнетесь во время путешествий по реестру, не пугайтесь: ничего сложного в них нет. Это все те же самые ключи для хранения цифр, но внутренняя реализация их несколько отличается от обычной. С вашей точки зрения как пользователя между ними нет никакой разницы. Особо дотошным скажу, что байты и слова внутри такого ключа перевернуты относительно их обычного порядка следования. REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ Текстовые данные. REG_SZ ? просто обычная строка текста. Тип REG_ EXPAND_SZ ? это так называемая расширяемая строка, она используется для подстановки значений переменных ? например, путей. Тип REG_ MULTI_SZ ? это многострочное текстовое поле. Роль переноса строки в нем играет символ NULL (0). REG_NONE Тип данных, определяющий ключ, назначение данных которого неизвестно. Помимо указанных мной, в реестре существуют и другие типы. Мой список отнюдь не полон, но вы вряд ли наткнетесь на отсутствующие в нем типы в реестре, или же они окажутся для вас бесполезны. Достоинства от фиксированности типов данных Встречая обычный файл, Windows догадывается о типе его содержимого по расширению в его имени. Догадки операционной системы, тем не менее, требуют дополнительной проверки. Вдруг вы назвали файл как текстовый, а он представляет собой бинарные данные? Поэтому, каждый раз открывая файл, операционная система дополнительно убеждается в том, что его реальное содержимое соответствует заявленному. Такая дополнительная проверка существенно замедляет доступ к содержимому файлов. Реестр, в отличие от обычной файловой системы, имеет специальный механизм для описания типов хранящихся в нем данных. Все возможные типы его "файлов" заранее известны и предопределены. Будучи узкоспециализированной файловой системой, он не предназначен для хранения большого количества разнообразных структур данных. Создавая новый ключ-файл, вы сразу указываете его тип, основываясь на списке допустимых вариантов. Впоследствии вы не можете внести в этот ключ данные, отличные от этого выбранного вами типа. За счет этого обстоятельства механизм реестра, во-первых, работает быстрее, так как у него нет необходимости разбираться с типом ключа ? он его знает заранее. Во-вторых, реестр может оптимизировать хранение информации в своих внутренних структурах, опять-таки, основываясь на предопределенности хранящегося в нем типа информации. 2 "Ярлыки" в реестре Помимо самих "файлов" ? ключей и папок, в реестре попадаются и "ярлыки". Эти ярлыки хоть и выглядят как полноценные "папки", на самом деле просто "ссылаются" на какую-либо другую часть реестра. Придуманы они, как и обычные файловые ярлыки, для того, чтобы упростить доступ к реальным папкам, находящимся где-то в глубине иерархии дерева реестра. Также с их помощью удобно объединять несколько папок в одну по какому-либо общему признаку. Например, наиболее пугающий неопытного пользователя своей непонятностью ключ реестра HKEY_ CLASSES_ROOT ? это на самом деле ярлык. Он указывает на папку реестра HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES, внутри которой и хранятся реальные данные. Без разбега, сразу взлетА давайте-ка сразу, не отходя от кассы, и выведем на белый свет истинную сущность папки HKEY_CLASSES_ ROOT. Щелкните по кнопке Пуск, затем по Выполнить. В появившемся поле ввода окне набираете REGEDIT и нажимаете OK. Перед вами появится редактор реестра. Заходим в папку HKEY_CLASSES_ROOT, а затем в какую-либо из ее вложенных папок ? например, подписанную символом звездочки. Мы с вами могли бы создавать свои ключи и в корне папки HKEY_CLASSES_ROOT, но отыскать их в этом длинном списке было бы нелегко. Только по этой причине я и выбрал вложенную папку со звездочкой ? на моем компьютере она просто является первой по счету в списке. Встаете на эту папку (клавиатурой или мышью ? безразлично) и вызываете контекстное меню правой кнопкой мыши. В меню выбираете пункт Создать, а в нем ? пункт Раздел. В ответ на ваши действия в папке со звездочкой появится новая папка с именем "Новый раздел#1". Вы можете дать ей более осмысленное название с помощью пункта ее контекстного меню Переименовать или обычным для Windows способом, встав на эту папку и нажав на клавиатуре F2. Поиграйтесь с переименованием папки самостоятельно, а затем вызовите ее контекстное меню и снова выберите Создать. На этот раз укажите, что вы хотите создать новый строковый параметр. В ответ на это в вашей папке появится "файл" по имени "Новый параметр #1". Его, кстати, тоже можно переименовать вышеуказанным способом. Дайте этому файлу-ключу какое-либо осмысленное название, а затем щелкните по нему мышкой (или нажмите Enter на клавиатуре). Появится окно редактирования содержимого этого "файла". Наберите в этом окне текст "Я тут был!", сохраните набранное, нажав кнопку OK. Следующим шагом отправляемся в папку реестра HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES. Находим там хорошо нам знакомую папку со звездочкой и... о чудо! В этой папке уже имеется не только созданная нами папка, но даже и ключ с содержимым "я тут был". Произошло так потому, что в реальности никакой такой папки HKEY_CLASSES_ROOT не существует. Она является ярлыком на папку HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES, и, редактируя одну из этих папок, вы сразу "редактируете" и другую. Подобных папок-ярлыков в реестре довольно много. Встречая в реестре одинаковые параметры, лежащие в разных папках, прежде чем исправлять нужное вам значение во всех найденных экземплярах, предварительно убедитесь, что вы не имеете дело с ярлыком. Еще один тип ярлыков 3 Вторым характерным примером использования папок-ярлыков является ветвь реестра HKEY_CURRENT_ USER. Это ярлык на одну из вложенных в ветвь HKEY_USERS папок, обладающих длинным цифровым названием (SECURE ID пользователя). Когда вы выбираете при входе в систему имя пользователя, Windows и создает этот ярлык. За счет наличия подобной "переадресации" все программы, которые думают, что они пишут свои настройки в папку HKEY_CURRENT_USER, в реальности сохраняют эти настройки в персональной папке конкретного пользователя. Другой пользователь, войдя в систему от другого имени, подключит этот ярлык уже к своей реальной папке в HKEY_USERS и, следовательно, получит другой комплект настроек тех же самых программ. Таким образом, система позволяет разным пользователям подстраивать "под себя" настройки приложений. Точно таким же переключаемым ярлыком является и папка HKEY_ LOCAL_MACHINE\SYSTEM\CURRENT_CONTROL_SET. Она указывает на один из профилей оборудования, в реальности хранящийся в папке HKEY_LOCAL_MACHINE\SYSTEM под именем CONTROL_SET00x, где x ? число (например, 0, 1, 2 и т.д.). CURRENT_CONTROL_SET указывает на тот профиль, который был использован вами для загрузки. Исправляя значение в этой папке, вы в реальности меняете значение в одной из папок CONTROL_SET00x. Учитывайте это обстоятельство, прежде чем приступать к модификации хранящихся в ней ключей. Выяснить, к какой именно папке в данный момент подключена папка-ярлык, довольно несложно. Руководствуясь ранее данными мной инструкциями, просто создайте в заинтересовавшей вас папке-ярлыке свою, новую папку или ключ. Дальше ваша задача довольно проста: вам нужно всего лишь просмотреть указанные мной реальные папки. Если вы видите, что в одной из них эта ваша новая папка появилась, значит, именно на эту папку и указывает сейчас ярлык. Вуаля! Мы ее нашли. Разумеется, сама Windows пользуется другими методами идентификации ярлыков, но для человека указанный способ намного более нагляден. Временные папки Завершая рассказ о типах папок в реестре, не могу не упомянуть о еще одной их разновидности. Называется этот тип "временные" папки. Ярким представителем таких папок является раздел HKEY_LOCAL_MACHINE\ HARDWARE. Все содержимое этого раздела реестра каждый раз пересоздается в момент загрузки компьютера. Таким образом, изменять какие-либо значения в этой ветви особого смысла не имеет, так как при следующей загрузке все ваши труды канут в Лету. Как реестр хранится на жестком диске компьютера Разобравшись с типами папок реестра, давайте посмотрим, как именно они хранятся на компьютере. Это знание поможет вам в случае форс-мажорных обстоятельств восстановить вашу систему. Весь реестр, как и следовало ожидать, хранится в обычных файлах, причем разные папки реестра в разных физических файлах. Как правило, каждая корневая папка реестра хранится не в одном, а в трех разных физических файлах. Первый, без расширения, и есть сам бинарный файл содержимого папки. Необходимость второго файла, с расширением LOG, вытекает из того обстоятельства, что реестр является журналируемой файловой системой. В файле LOG хранятся протоколы всех транзакций, проводившихся в реестре. В том случае, если ваш компьютер повиснет на половине дороги записи каких-либо данных в реестр, система по логам, хранящимся в файле LOG, сделает откат изменений. За счет этого механизма обеспечивается однозначность всех операций с реестром. Данные могут быть или записаны в реестр, или нет. "Наполовину" записанных данных в реестре не бывает ? тут дело обстоит как в известном анекдоте про беременность и файловой системе NTFS. 4 Третий тип файлов, называющийся SAV, для нас малоинтересен. Эти файлы создает установщик Windows по окончанию текстовой фазы установки. Если в последующем графическом режиме что-либо пойдет наперекосяк, Windows пользуется этими файлами для восстановления реестра. В дальнейшем, насколько я понял, эти файлы не используются. Если вы переименуете файлы SAV в одноименные файлы без расширения, этим самым вы вернетесь на этап самого начала установки Windows. Она затребует диск с дистрибутивом и продолжит установку так, как будто вы только что ее прервали, а не работали на системе несколько месяцев. Итак, давайте посмотрим, как именно называются файлы, в которых хранятся основные папки реестра. Папка HKEY_LOCAL_MACHINE\SAM Папка реестра, отвечающая за настройки всех участников безопасности Windows. В обычном REGEDIT эта папка выглядит пустой, хотя это вовсе не так. У вас просто нет прав даже на чтение ее содержимого. Существуют альтернативные редакторы реестра (например, мой любимый RESPLENDENT REGISTRAR), с помощью которых можно увидеть и даже отредактировать ее ключи. Хранится содержимое этой папки в файлах, находящихся в каталоге C:\WINDOWS\SYSTEM32\ CONFIG. Файлы называются SAM, SAM.SAV и SAM.LOG. Папка HKEY_LOCAL_MACHINE\SECURITY Папка реестра, также отвечающая за настройки безопасности Windows. Эта папка вообще не видна в обычном редакторе реестра REGEDIT. Редактор REGISTRAR позволяет смотреть и редактировать. В этой ветви живут пользователи, группы, относящиеся к ним политики безопасности и тому подобные вещи. Содержимое этой папки хранится в файлах, также находящихся в каталоге C:\WINDOWS\SYSTEM32\ CONFIG. Файлы называются SECURITY, SECURITY.SAV и SECURITY.LOG. Папка HKEY_LOCAL_MACHINE\SOFTWARE Папка реестра, в которой хранятся настройки различных приложений и самого Windows, общие для всех пользователей. Папка доступна для редактирования обычным REGEDIT, так что сами посмотрите, что именно в ней лежит. Как вы уже, наверно, догадались, содержимое этой папки, опять-таки, хранится в файлах, находящихся в каталоге C:\WINDOWS\SYSTEM32\CONFIG. Файлы называются SOFTWARE, SOFTWARE.SAV и SOFTWARE.LOG. Папка HKEY_LOCAL_MACHINE\SYSTEM Папка реестра, в которой хранятся настройки вашего компьютерного железа. Тут же лежат описания запускаемых на вашей машине сервисов и тому подобные низкоуровневые вещи. Папка доступна для свободного редактирования через REGEDIT. Содержимое этой папки хранится в файлах, находящихся в каталоге... Ну как, догадались? Так и есть: C:\WINDOWS\SYSTEM32\CONFIG. Файлы называются SYSTEM, SYSTEM.SAV и SYSTEM.LOG. Папка HKEY_USERS\.DEFAULT Папка реестра, в которой хранятся настройки так называемого "пользователя по умолчанию". Настройки этого пользователя служат своеобразным макетом, на основе которого формируются настройки всех остальных вновь создаваемых вами пользователей. 5 Система просто копирует все содержимое этой папки в папку HKEY_USERS вновь созданного пользователя. Папка доступна для свободного редактирования через REGEDIT. Содержимое этой папки хранится в файлах, находящихся в каталоге C:\WINDOWS\SYSTEM32\ CONFIG. Файлы называются DEFAULT, DE-FAULT.SAV и DEFAULT.LOG. Папки каждого отдельного пользователя внутри HKEY_USERS Хранят настройки программ под каждого конкретного пользователя, имеющегося в вашей системе. В момент установки WINDOWS XP регистрирует как минимум двух пользователей ? "Администратора" и того пользователя, имя которого вы указали на одном из экранов ее установки. Папка доступна для свободного редактирования через REGEDIT. Содержимое этой папки хранится в файлах, находящихся в каталоге... а вот и не угадали! На этот раз ? в C:\Documents and Settings\<имя пользователя>. Файл называется NTUSER. DAT. Рядышком обычно лежат файлы-компаньоны. В файле NTUSER.LOG хранится содержимое ветви HKEY_ CURRENT_USER. Файлы NTUSER.POL и NTUSER.INI создаются редактором глобальных политик WINDOWS, в них хранятся созданные с его помощью политики для этого пользователя. О редакторе политик мы еще с вами поговорим в последующих статьях цикла. Папка HKEY_USERS\USER_CLASSES Эта папка является дополнением к папке HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES. В ней хранятся классы и типы приложений, зарегистрированные (или измененные) под этого конкретного пользователя. Например, в этой папке на моем ноутбуке хранятся расширения файлов, которые зарегистрировал "под себя" медиа-плейер BS PLAY (он идет на доброй половине всех MPEG4-видеодисков). Эти данные хранятся в файлах USRCLASS.DAT и USRCLASS.DAT.LOG. Файлы расположены в папке C:\Documents and Settings\ <имя пользователя>\Local Settings\Ap-plication Data\Microsoft\ Windows. Если вы внимательно проанализировали соответствие файлов и папок, то наверняка обратили внимание на то, что в моем списке отсутствуют такие важные папки, как HKEY_LOCAL_ MACHINE и HKEY_USERS. Так вот, и эти папки также являются фикцией. В реальности подобных папок просто не существует. Система строит их для нашего удобства, и не более того. Именно благодаря отсутствию объединяющего начала для всех этих файлов мы можем свободно комбинировать между собой текущие файлы и архивные или даже и вовсе файлы, взятые с другого компьютера. 6