Файлов составляющих реестр WinNT/2000, не два и не три, а ни как не меньше шести: DEFAULT, SAM, SECURITY, SOFTWARE, SYSTEM, ntuser.dat.В Win2K добавился UsrClass.dat. Реестр состоит из двух типов блоков: заголовочного и блоков данных. Всю информационную нагрузку несут блоки второго типа.
Структура реестра Файлов составляющих реестр WinNT/2000, не два и не три, а ни как не меньше шести: DEFAULT, SAM, SECURITY, SOFTWARE, SYSTEM, ntuser.dat.В Win2K добавился UsrClass.dat. Реестр состоит из двух типов блоков: заголовочного и блоков данных. Всю информационную нагрузку несут блоки второго типа. Все блоки в реестре кратны 4К, видимо в силу 32-х разрядности системы, а потому и единственный заголовочный блок несущий информации на копейку занимает эти 4К на всю катушку. Вот его структура: 0000: dword 'regf' - сигнатура файла реестра WinNT/2000 0004: 8 dword - набор двойных слов непонятного назначения 0024: dword 20h - возможно размер заголовка блока 'hbin' 0028: dword - размер области данных (кратно 4К) 002C: dword - двойное слово непонятного назначения 0030: 1CCh bytes - мусор 01FC: dword - контрольная сумма предыдущих слов 0200: E00h bytes - не используется Далее один за одним (может быть и один) следуют блоки данных следующего вида (опять же кратные 4К):
n000: dword 'hbin' - сигнатура блока данных n004: dword - относительное смещение адресов в блоке (обычно n000h-1000h) n008: dword - размер блока (указатель на следующий блок) n00C: Some bytes n020: Начало данных текущего блока
Данные распределены по блокам различной структуры и длины, которые могут иметь обозначение типа данных, которые содержат, а могут и не иметь. Идем дальше. Все типизированные блоки какие мне встречались содержат одну из ниже перечисленных сигнатур:
'nk' - элемент дерева (node key ?) 'lf' - короткий индекс, "оглавление" (location field ? labels field ? list field) 'sk' - элемент защиты (security key ?) 'vk' - параметр (value key ?) 'ri' - связка индексов (relation index ?) 'li' - индекс (labels index ? list index)
В скобках варианты расшифровки сигнатур.
The Registry has a hierarchal structure, although it looks complicated the structure is similar to the directory structure on your hard disk, with Regedit being similar to Windows Explorer. Each main branch (denoted by a folder icon in the Registry Editor, see below) is called a Hive, and Hives contains Keys. Each key can contain other keys (sometimes referred to as sub-keys), as well as Values. The values contain the actual information stored in the Registry. There are three types of values; String, Binary, and DWORD - the use of these depends upon the context. There are six main branches, each containing a specific portion of the information stored in the Registry. They are as follows: · HKEY_CLASSES_ROOT : This branch contains all of your file association types, OLE information and shortcut data. · HKEY_CURRENT_USER : This branch links to the section of HKEY_USERS appropriate for the user currently logged onto the PC. · HKEY_LOCAL_MACHINE : This branch contains computer specific information about the type of hardware, software, and other preferences on a given PC, this information is used for all users who log onto this computer. · HKEY_USERS : This branch contains individual preferences for each user of the computer, each user is represented by a SID sub-key located under the main branch. · HKEY_CURRENT_CONFIG : This branch links to the section of HKEY_LOCAL_MACHINE appropriate for the current hardware configuration. · HKEY_DYN_DATA : This branch points to the part of HKEY_LOCAL_MACHINE, for use with the Plug-&-Play features of Windows, this section is dymanic and will change as devices are added and removed from the system.
NT Реестр
На смену ini-файлам, имеющим ряд концептуальных ограничений, еще в Win3.1 было введено понятие реестра — регистрационной базы данных, хранящей различные настройки ОС и приложений. Изначально реестр был предназначен только для хранения сведений об объектах OLE (Object Linking and Embedding — связь и внедрение объектов) и сопоставлений приложений расширениям имен файлов, однако позже его структура и границы использования расширились. Реестры разных версий Windows имеют различия; это нужно помнить при импорте reg-файлов. В Win2K и XP в архитектуру реестра были введены важные новшества, улучшающие функциональность данного компонента ОС. Реестр хранится в бинарном (двоичном) виде, поэтому для ручной работы с ним необходима специальная программа — редактор реестра. В XP это Regedit.exe, в других версиях NT ими являются Regedit.exe и Regedt32.exe, имеющий дополнительные возможности работы с реестром (Regedt32.exe есть и в XP, но на самом деле он всего лишь вызывает Regedit.exe). Есть и другие программы, в том числе и консольные (Reg.exe). Рассмотрим основные группы сведений, хранящихся в этой базе данных.
• Программы установки. Любая грамотно написанная программа под Windows должна иметь свой инсталлятор-установщик. Это может быть встроенный в ОС Microsoft Installer либо любой другой. В любом случае инсталлятор использует реестр для хранения своих настроек, позволяя правильно устанавливать и удалять приложения, не трогая совместно используемые файлы. • Распознаватель. При каждом запуске компьютера программа NTDETECT.COM и ядро Windows распознает оборудование и сохраняет эту информацию в реестре. • Ядро ОС. Хранит много сведений в реестре о своей конфигурации, в том числе и данные о порядке загрузки драйверов устройств. • Диспетчер PnP (Plug and Play). Абсолютно необходимая вещь для большинства пользователей, которая избавляет их от мук по установке нового оборудования (не всегда, правда:)). Неудивительно, что он хранит свою информацию в реестре. • Драйверы устройств. Хранят здесь свои параметры. • Административные средства. Например, такие, как Панель управления, MMC (Micro-soft Management Console) и др. • Пользовательские профили. Это целая группа параметров, уникальная для каждого пользователя: настройки графической оболочки, сетевых соединений, программ и многое другое. • Аппаратные профили. Позволяют создавать несколько конфигураций с различным оборудованием (помните мой пример про ноутбук с док-станцией в прошлой статье?). • Общие настройки программ. Почему общие? Потому, что у каждого пользователя есть профиль, где хранятся его настройки для соответствующей программы. Структура реестра Первая аналогия, которая приходит в голову при взгляде на реестр в Regedit.exe, — как похоже на файловую систему! И точно, налицо древовидная структура. Папкам здесь соответствуют ключи (keys) или разделы (ветви), а файлам — параметры (values). Разделы могут содержать как вложенные разделы (sub keys), так и параметры. На верхнем уровне этой иерархии находятся корневые разделы (root keys). Они перечислены в таблице 1. Таблица 1. Корневые разделы Тип данных | Описание | REG_BINARY | Двоичные данные. Большинство сведений об аппаратных компонентах хранится в виде двоичных данных и выводится в редакторе реестра в шестнадцатеричном формате | REG_DWORD | Данные, представленные целым числом (4 байта). Многие параметры служб и драйверов устройств имеют этот тип и отображаются в двоичном, шестнадцатеричном или десятичном форматах | REG_EXPAND_SZ | Строка Unicode переменной длины. Этот тип данных включает переменные, обрабатываемые программой или службой | REG_MULTI_SZ | Многострочный текст Unicode. Этот тип, как правило, имеют списки и другие записи в формате, удобном для чтения. Записи разделяются пробелами, запятыми или другими символами | REG_SZ | Текстовая Unicode строка фиксированной длины | REG_DWORD_LITTLE_ENDIAN | 32-разрядное число в формате “остроконечников” — младший байт хранится первым в памяти. Эквивалент REG_DWORD | REG_DWORD_BIG_ENDIAN | 32-разрядное число в формате “тупоконечников” — старший байт хранится первым в памяти | REG_LINK | Символическая ссылка Unicode. Только для внутреннего использования (некоторые корневые разделы являются такой ссылкой на другие подразделы) | REG_NONE | Параметр не имеет определенного типа данных | REG_QWORD | 64-разрядное число | REG_QWORD_LITTLE_ENDIAN | 64-разрядное число в формате “остроконечников”. Эквивалент REG_QWORD | REG_RESOURCE_LIST | Список аппаратных ресурсов. Используется только в разделе HKLM\HARDWARE | REG_FULL_RESOURCE_DESCRIPTOR | Дескриптор (описатель) аппаратного ресурса. Применяется только в HKLM\HARDWARE. | REG_RESOURCE_REQUIREMENTS_LIST | Список необходимых аппаратных ресурсов. Используется только в HKLM\HARDWARE. |
Типы данных Все параметры реестра имеют фиксированный тип. В таблице 2 я приведу полный список используемых типов. Не все из них используются в разных версиях NT — REG_QWORD явно предназначен для 64-битной версии XP. Следует учесть, что ряд типов используется только системой в некоторых разделах, и создать свой параметр такого типа с помощью редактора реестра не получится. Таблица 2. Типы параметров Тип данных | Описание | REG_BINARY | Двоичные данные. Большинство сведений об аппаратных компонентах хранится в виде двоичных данных и выводится в редакторе реестра в шестнадцатеричном формате | REG_DWORD | Данные, представленные целым числом (4 байта). Многие параметры служб и драйверов устройств имеют этот тип и отображаются в двоичном, шестнадцатеричном или десятичном форматах | REG_EXPAND_SZ | Строка Unicode переменной длины. Этот тип данных включает переменные, обрабатываемые программой или службой | REG_MULTI_SZ | Многострочный текст Unicode. Этот тип, как правило, имеют списки и другие записи в формате, удобном для чтения. Записи разделяются пробелами, запятыми или другими символами | REG_SZ | Текстовая Unicode строка фиксированной длины | REG_DWORD_LITTLE_ENDIAN | 32-разрядное число в формате “остроконечников” — младший байт хранится первым в памяти. Эквивалент REG_DWORD | REG_DWORD_BIG_ENDIAN | 32-разрядное число в формате “тупоконечников” — старший байт хранится первым в памяти | REG_LINK | Символическая ссылка Unicode. Только для внутреннего использования (некоторые корневые разделы являются такой ссылкой на другие подразделы) | REG_NONE | Параметр не имеет определенного типа данных | REG_QWORD | 64-разрядное число | REG_QWORD_LITTLE_ENDIAN | 64-разрядное число в формате “остроконечников”. Эквивалент REG_QWORD | REG_RESOURCE_LIST | Список аппаратных ресурсов. Используется только в разделе HKLM\HARDWARE | REG_FULL_RESOURCE_DESCRIPTOR | Дескриптор (описатель) аппаратного ресурса. Применяется только в HKLM\HARDWARE. | REG_RESOURCE_REQUIREMENTS_LIST | Список необходимых аппаратных ресурсов. Используется только в HKLM\HARDWARE. |
Хранение реестра Элементы реестра хранятся в виде атомарной структуры. Реестр разделяется на составные части, называемые ульями (hives), или кустами. Ульи хранятся на диске в виде файлов. Некоторые ульи, такие, как HKLM\HARDWARE, не сохраняются в файлах, а создаются при каждой загрузке, то есть являются изменяемыми (vola-tile). При запуске системы реестр собирается из ульев в единую древовидную структуру с корневыми разделами. Перечислим ульи реестра и их местоположение на диске (для NT старше версии 4.0) в таблице 3. Таблица 3. Ульи реестра Улей | Расположение | HKLM\SYSTEM | %SystemRoot%\system32\config\system | HKLM\SAM | %SystemRoot%\system32\config\SAM | HKLM\SECURITY | %SystemRoot%\system32\config\SECURITY | HKLM\SOFTWARE | %SystemRoot%\system32\config\software | HKLM\HARDWARE | Изменяемый улей | HKLM\SYSTEM\Clone | Изменяемый улей | HKU\<SID_пользователя> | %USERPROFILE%\ntuser.dat | HKU\<SID_пользователя>_Classes | %USERPROFILE%\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat | HKU\.DEFAULT | %SystemRoot%\system32\config\default |
Кроме этих файлов, есть ряд вспомогательных, со следующими расширениями: • ALT — резервная копия улья HKLM\SYSTEM (отсутствует в XP). • LOG — журнал транзакций, в котором регистрируются все изменения реестра. • SAV — копии ульев в том виде, в котором они были после завершения текстовой фазы установки. Дополнительные сведения Реестр является настоящей базой данных, поэтому в нем используется технология восстановления, похожая на оную в NTFS. Уже упомянутые LOG-файлы содержат журнал транзакций, который хранит все изменения. Благодаря этому реализуется атомарность реестра — то есть в данный момент времени в реестре могут быть либо старые значения, либо новые, даже после сбоя. Как видим, в отличие от NTFS, здесь обеспечивается сохранность не только структуры реестра, но и данных. К тому же, реестр поддерживает такие фишки NTFS, как управление избирательным доступом и аудит событий — система безопасности пронизывает всю NT снизу доверху. Да, эти функции доступны только из Regedt32.exe или Regedit.exe для XP. А еще весь реестр или его отдельные части можно экспортировать в текстовые reg-файлы (Unicode для Windows 2000 и старше), редактировать их в блокноте, а затем экспортировать обратно. Во многих редакторах реестра можно подключать любые доступные ульи реестра, в том числе и на удаленных машинах (при соответствующих полномочиях). Есть возможность делать резервные копии с помощью программы NTBackup. И многое другое. Раздел HKEY_CLASSES_ROOT Раздел HKCR является точной копией раздела HKEY_ LOCAL_MACHINE\SOFTWARE\Classes и содержит в себе информацию о всех зарегистрированных в системе типах файлов. Именно из этого раздела берется информация для представления в окне "Типы файлов". Но хранится информация о зарегистрированных расширениях весьма своеобразно и сложно. Вначале в разделе HKCR идет список всех расширений (с точками вначале!), зарегистрированных в системе, каждое из которых является названием раздела реестра. В каждом таком подразделе обязательно есть параметр "По умолчанию". В нем записано как бы "внутреннее" название расширения, которое "в ходу" у системы. В разделе HKCR также присутствует раздел с именем этого внутреннего названия расширения (расположенный ниже в окне Редактора реестра), в котором находятся параметры, определяющие контекстное меню правой кнопки мыши этого расширения. В параметре "По умолчанию" этого раздела записано "официальное" название типа файлов с таким расширением, которое, например, присутствует в списке окна "Типы файлов". В разделе, имя которого соответствует расширению с точкой вначале, также могут находиться различные ключи, определяющие интеграцию данного типа файлов в Проводник. В частности, если создать здесь раздел с именем, соответствующим внутреннему названию расширения, а в нем - раздел с именем ShellNew со строковым параметром NullFile, то в выпадающий список "Создать" будет помещено "официальное" название типа файлов. При выборе в списке этого типа будет создан пустой файл с расширением, соответствующим этому названию. Если в папку Windows\ShellNew поместить файл с этим расширением, а в разделе ShellNew создать не параметр NullFile, а параметр FileName и в его значении указать имя этого файла, то при выборе этого типа файлов в списке "Создать" в текущей папке будет создана копия файла, помещенного в папку Windows\ShellNew. В разделе с именем "внутреннего" названия расширения могут находиться разделы DefaultIcon, параметр которого "По умолчанию" определяет иконку этого типа файлов и shell, в котором располагаются команды контекстного меню правой кнопки мыши данного типа файлов. Название действия, которое отображается в контекстном меню, может быть либо названием подраздела раздела shell, либо значением параметра "По умолчанию" этого подраздела (в последнем случае название самого подраздела не имеет значения). В разделе с именем команды контекстного меню располагается подраздел command В параметре "По умолчанию" там указан полный путь к программе, которая должна выполнить данное действие. Все вышеизложенное несколько трудно для восприятия, но, увы,- это так. Приведена же здесь эта информация для того, чтобы вы поняли назначение различных групп разделов реестра. Кроме того, из нее вытекают несколько практических выводов. Теперь вы можете свободно редактировать выпадающее меню "Создать". Для удаления лишних пунктов оттуда надо просто провести поиск по словам FileName или NullFile и удалить ключи ShellNew в тех найденных разделах, которые не нужны. Вы можете удивиться, найдя очень много параметров FileName и NullFile, причем в разделах типов файлов, которые не присутствуют в меню "Создать". Это чаще всего остатки предыдущих инсталляций программ. Дело в том, что для того, чтобы название типа файлов появилось в меню "Создать", требуется правильное оформление всех частей реестра, посвященных данному типу: и раздел с "внутренним" именем, и раздел shell, и в нем обязательно - раздел с именем open и т. д. Ну а для добавления какого-либо пункта в меню "Создать" нужно найти раздел с именем нужного расширения и добавить в него подразделы с его "внутренним" именем и именем ShellNew, а там - указать параметр NullFile (или FileName с именем файла). Ну и, естественно, проверить наличие и правильность оформления раздела с "внутренним" именем этого расширения. "Обломки" инсталляций - разделы с именами типов файлов - могут, к примеру, образоваться так. Программа Microsoft Photo Editor при своей установке поместила в реестр записи о том, что файл с расширением .gif имеет "внутреннее" имя giffile, создала под него в реестре два раздела - .gif и giffile, прописав там все, что нужно. При установке программы ACDSee она в разделе .gif заменила "внутреннее" имя этого типа на свое - ACDSee.GIF и создала под него раздел с этим именем, куда и разместила свои команды. А прежний-то раздел, giffile, остался! Но он теперь уже не соответствует никакому типу файлов, т. к. ни у одного расширения нет такого "внутреннего" имени. После длительной эксплуатации системы таких кусков накапливается достаточно много. Поэтому поиск нужного раздела надо начинать именно со списка расширений, а потом уже переходить к списку "внутренних" имен, узнав нужное. В некоторых разделах, посвященных типам файлов, можно найти еще и другие подразделы. Например, раздел ddeexec в подразделе с именем команды раздела shell какого-либо типа файлов содержит те команды DDE, которые должны использоваться. Некоторые программы способны воспринимать команды операционной системы при открытии того или иного типа файлов и, к примеру, открывать их не в новом окне, а в своем подокне. Это называется Dynamic Data Exchange, DDE - динамический обмен данными. Иногда встречаются параметры Content Type. Это - указания Internet-броузеру на тот случай, если он встретит подобный файл в Сети. Новые файлы определенных типов, скажем, ярлыки, создаются не с помощью копирования пустого файла из папки Windows\ShellNew, а командой какой-либо программе. В этом случае вместо ключа FileName в разделе ShellNew этого типа файлов будет находиться параметр Command с соответствующей командой. Существуют и другие возможные виды разделов, но подробное их описание выходит за рамки статьи. Некоторые типы файлов могут быть зарегистрированы в реестре по упрощенной схеме. При ее использовании "внутреннее" имя не указывается, а те параметры, которые должны были бы присутствовать в соответствующем разделе, находятся в разделе с именем расширения файла. Такая схема тоже работает, но все же является не совсем корректной. CLSID В разделе HKCR имеется подраздел CLSID, едва ли не самый большой во всем реестре. Он содержит в себе информацию об объектах операционной системы, имеющих свои идентификаторы - длинные числа в фигурных скобках, как бы большой список всех их имен. С его помощью идет общение между различными компонентами системы, и именно он позволяет им слаженно работать и дает возможность добавлять новые объекты. Объектами в операционной системе является программы, папки, компоненты программ и др. Строго говоря, объект в программистском понимании - это все, что имеет имя и к чему можно обращаться как к единому целому. Этой возможностью пользуются разработчики программ, интегрирующихся в систему. Служебные папки, такие, как "Панель управления", "Удаленный доступ к сети", "Принтеры", которые вы вероятно в свое время безуспешно искали на жестком диске, являются именно такими объектами и имеют свои идентификаторы. Идентификаторы имеют и реальные папки, выполняющие в системе какие-либо функции, например Рабочий стол, Корзина. Вы вправе даже дать такой идентификатор какой-либо из своих папок (тогда ее, в частности, можно будет включить в окно "Мой компьютер"). Хотите добавить в «Мой компьютер» свои папки? Задача трудоемкая, но вполне выполнимая. Некоторые объекты операционной системы, кроме идентификаторов, имеют еще и словесные имена. В этом случае эти имена отображаются в качестве имен разделов в той же части HKCR, что и "внутренние" имена типов файлов и содержат в себе информацию об идентификаторе в одном из своих параметров. Остальные их параметры могут содержать различную служебную информацию. Раздел реестра Software и HKEY_CURRENT_USER И наконец, последний и наиболее обширный раздел - это раздел Software. Параметры установленных программ - в т. ч. и самой Windows! Однако свои параметры в этот раздел пишут не все программы, а лишь те, которые поддерживают многопользовательский режим, т. е. допускают различные свои настройки для разных пользователей Windows. (Остальные размещают свои данные в аналогичном разделе ключа HKLM.) В самом разделе Software полагается помещать не подразделы с названиями программ, а подразделы с названиями их фирм-производителей, а уже лишь в них - названия программ. (Это правило, впрочем, не всегда соблюдается программистами.) В подразделе Microsoft расположены настройки установленных на компьютере программ, выпущенных этой фирмой. В его подразделе Internet Account Manager находятся настройки учетных записей текущего пользователя программы Outlook Express. Рядом с ним можно видеть подраздел с именем этой программы, тоже полный разнообразных настроек. При смене текущего пользователя Outlook Express содержимое этих разделов заменяется на соответствующее из раздела HKCU\Identities. Рядом - раздел Internet Explorer: чьи настройки там находятся, думается, ясно. Для того чтобы через целый лес из имен программ и фирм добраться до настроек вашей операционной системы, найдите в разделе Software подраздел Microsoft, а в нем - подраздел Windows. Там откройте подраздел CurrentVersion (обычно он один). И вот перед вами еще один блок настроек операционной системы! Количество подразделов здесь может варьировать в зависимости от "навороченности" вашей Windows: и Internet Explorer, и MS Office могут добавить сюда пару-тройку компонентов. В подразделе Applets (ключа HKCU\Software\Microsoft\Windows\CurrentVersion, если вы еще не забыли) расположены настройки стандартных программ Windows. Тут и старые знакомые Defrag и FreeCell, Hearts и Paint, и System Monitor с Media Player. Иногда вы можете найти параметры с названиями вроде WindowOriginY или просто Y или X. Это записано местоположение окна программы при последнем выходе из нее, чтобы при следующем запуске оно располагалось на том же самом месте, что и в прошлый раз. А вас никогда эта способность Windows не удивляла?.. В подразделе Internet Settings вы также встретите некоторые свои настройки броузера Internet Explorer. С ними особо разбираться не следует: все равно все настраивается через диалоговые окна самого броузера. В подразделе Policies можно запретить интерфейсу Windows отображать определенные свои компоненты. Установив параметр NoNetHood раздела Explorer в 1, вы скроете пиктограмму Сетевого окружения с Рабочего стола. А установив параметр NoDispScrSavPage раздела System в 1, вы запретите отображать вкладку установки скринсейвера в Свойствах экрана, тем самым в определенной степени предотвратив чью-нибудь злую шутку по установке пароля на скринсейвер в ваше отсутствие. В принципе названия почти всех параметров в этом разделе вполне понятны. Только не ставьте параметр DisableRegistryTools в 1 - после этого вы больше regedit.exe запустить не сможете. Придется восстанавливать реестр как после краха системы или писать специальный .reg - файл для удаления этого параметра… Подраздел Run - это то место, которое вам надо посещать как можно чаще. Это одно из двух мест в системном реестре, где прописаны пути к автозагружаемым программам. Указав здесь путь к программе, вы добьетесь того, что она будет загружаться каждый раз при запуске Windows. Этим часто пользуются троянские программы для своего автоматического запуска при загрузке компьютера (чтобы, скажем, при установлении соединения с Internet отправить своему создателю ветвь HKCU\RemoteAccess вашего реестра, а вместе с ней все логины и пароли). Поэтому, если вы здесь обнаруживаете запись, указывающую на подозрительный файл, смело удаляйте или хотя бы попробуйте выяснить, откуда эта программа и что она делает. Однако это не единственное место автозапуска программ - аналогичный раздел есть и в HKLM. Расположенный рядом подраздел RunOnce отличается от подраздела Run тем, что программы, пути к которым записаны в нем, запустятся всего лишь один раз, после чего их имена отсюда будут выкинуты. Этим ключом часто пользуются деинсталляторы - вы ведь наверняка видели сообщение, что "для завершения деинсталляции требуется перезагрузка компьютера"? При этом деинсталлятор прописывает сюда код для удаления оставшихся файлов, которые до перезагрузки использовались операционной системой и потому удалены быть не могли. Троянцы могут прописываться и здесь, так что регулярно просматривать этот подраздел - дело полезное. Подраздел Explorer - самый большой из всех подразделов CurrentVersion. Это параметры, пожалуй, самой используемой программы из поставки Windows - Проводника. В нескольких его подразделах размещается информация, местонахождение которой вы, наверняка, давным-давно хотели узнать. Хотите сделать ваш Internet Explorer разноцветным? Введите в параметр BackBitmap раздела HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar путь к нужному файлу. Вас никогда не интересовало, каким образом Windows сохраняет информацию о расположении значков на Рабочем столе и в папках, которые вы оставили открытыми, выходя из Windows? Загляните в подраздел Streams. Видите там 200 подразделов? Это - заготовки для сохранения информации о расположении значков. В некоторых из подразделов находятся параметр ViewView. Здесь такая информация уже внесена для будущего применения. Открыв этот параметр двойным щелчком мыши, можно увидеть длинное шестнадцатеричное число, а справа - его "перевод" на обычный символьный язык. И среди мешанины символов будут видны (конечно, не у всех таких параметров) имена ваших файлов, находящихся в какой-то одной папке. Значит, именно в этом разделе хранится информация о расположении значков в ней. Вы можете найти раздел с параметром ViewView, содержащим имена файлов на вашем Рабочем столе, экспортировать его в файл реестра и затем импортировать обратно при необходимости восстановить расположение иконок на экране. Но такой экспорт надо будет производить после каждого изменения расположения или состава значков Рабочего стола. Программа msconfig.exe даст вам возможность редактировать разделы Run, не запуская regedit.exe. В подразделах RunMRU и Doc Find Spec MRU содержится то, что вы когда-либо вводили в окна "Выполнить…" и "Найти". Почистите эти разделы или, наоборот, дополните их согласно необходимости, если желаете. В подразделах Shell Folders и User Shell Folders содержится информация о расположении служебных папок Windows, например Cookies или History. Если вы пожелаете переместить их в другое место или переименовать, то внесите сюда соответствующие изменения. Остальные подразделы и параметры подраздела Explorer настраивают мелкие особенности Проводника. Большинство других подразделов в CurrentVersion являются чисто служебными и особого интереса не представляют. Там записаны параметры некоторых программ из поставки Windows - и не более того. Хотя не забудьте глянуть в ProfileReconciliation, если будете через реестр менять расположение папок Cookies и History. В разделе HKCU\Software\VB and VBA Program Settings по умолчанию располагаются настройки для всех программ, написанных на языках Visual Basic и VBA. Поэтому загляните и сюда, если вы не нашли имени интересующей вас программы в остальной части раздела Software. Возможно, вас несколько смутило, например, то, что, скажем, настройки броузера Internet Explorer находятся не в одном разделе, а разбросаны по всему ключу HKCU, да и не только по нему. Но это, увы, так - Internet Explorer очень тесно интегрируется в операционную систему и на реестре это тоже отражается. Раздел реестра HKEY_LOCAL_MACHINE Следующий раздел реестра - HKLM, хранилище информации о вашем компьютере и о независимых от наличия различных пользователей настройках программ. Он самый крупный и самый важный из всех разделов реестра. При этом он содержит в себе, в одном из своих подразделов, и весь HKCR, который вынесен в отдельный ключ реестра лишь для удобства редактирования, и все возможные варианты содержимого раздела HKEY_CURRENT_CONFIG, в который помещается информация из HKLM в зависимости от текущей аппаратной конфигурации. Как HKLM в Редакторе реестра отображается файл System.dat, то есть вся информация этого ключа физически содержится именно в этом файле. Таким образом, HKLM - первый из описанных "реальный" раздел реестра, то есть имеющий под собой "физическую природу" - файл System.dat. (HKCR и HKCC - его подразделы, а с HKCU - подраздел HKU, второго "реального" раздела реестра). Подраздел Config содержит в себе данные о зарегистрированных в системе аппаратных конфигурациях. Windows позволяет при регулярных изменениях состава устройств в компьютере (например, при работе с ноутбуком, который имеет "док" - присоединяемую часть с CD-ROM, модемом и др.) не устанавливать и удалять каждый раз драйверы для всех этих устройств, а создать фиксированный набор драйверов для каждого и менять эти наборы при необходимости. Такой набор называется аппаратной конфигурацией и устанавливается через окно Панель управления - Система - Конфигурации. Окно Конфигурации используется крайне редко. Однако именно здесь записаны параметры текущей аппаратной конфигурации. В настоящее время в связи с развитием новых технологий USB и др. устройств "горячего подключения" необходимость в различных аппаратных конфигурациях почти отпала, но их поддержка в Windows присутствует. (В каталоге Windows есть файл tips.txt, в нем приведен пример создания нескольких аппаратных конфигураций для ноутбука.) В ключе Config под своими номерами располагаются записи о всех созданных конфигурациях, а при загрузке компьютера или изменении конфигурации соответствующий раздел "отражается" в реестре под видом раздела HKEY_CURRENT_CONFIG. Если аппаратная конфигурация одна, то и в разделе Config есть только один подраздел, совпадающий с ключом HKEY_CURRENT_CONFIG. (Сами имена конфигураций, отображаемые в окне Система, хранятся в ключе HKLM\System\CurrentControlSet\control\IDConfigDB вместе с номерами этих конфигураций.) Подраздел DesktopManagement посвящен работе системы с библиотекой deskmgmt.dll из каталога Windows\System, отвечающей за работу операционной системы с процессором, памятью и другими устройствами материнской платы компьютера. Здесь записаны команды, обратившись с которыми из другой программы к этой библиотеке, можно получить соответствующие данные. Подраздел Enum содержит информацию о распознанных операционной системой устройствах компьютера. В Windows есть несколько важных программных компонентов, отвечающих за обнаружение устройств и предоставление их для работы другим компонентам системы. Основными среди них являются два - диспетчер конфигурации и энумератор. При загрузке компьютера диспетчер конфигурации опрашивает BIOS и получает от него информацию о всех устройствах, не поддерживающих стандарт Plug&Play, а затем заносит ее в реестр, в этот самый раздел Enum. Затем в дело вступает программа-энумератор, которая считывает из реестра информацию о не-Plug&Play-устройствах, а затем опрашивает имеющиеся в компьютере Plug&Play-устройства и составляет список всех имеющихся, назначив каждому единственный идентификатор - HardwareID. Затем основная роль вновь переходит к диспетчеру конфигурации, который на основании информации энумератора о наличии устройств и их характеристике (Plug&Play или нет) распределяет между устройствами прерывания, адреса ввода-вывода и другие ресурсы системы. В этом ему помогают специальные подпрограммы "арбитры", которые изменяют выделяемые ресурсы так, чтобы не было, используемых одновременно двумя устройствами. Вначале распределяются ресурсы между не-Plug&Play-устройствами (информация о которых пришла еще из BIOS), а затем между Plug&Play, так как последние умеют работать с разными настройками распределения ресурсов без изменения своей аппаратной части, и переназначить им, например, прерывания можно программно. Все внесенные изменения фиксируются в разделе Enum, а также в разделе HKLM\System\CurrentControlSet\Services\Class, содержащем совокупность информации о распознанных устройствах, а также о загруженных для них драйверах, на подразделы с данными о которых в разделе Enum имеются ссылки. Подраздел HKLM\Hardware, несмотря на громкое и многообещающее название, хранит в себе немного информации о последовательных портах и установленных на них модемах. Информация - на уровне перечисления имеющихся в компьютере портов и разъемов для модемов. Подразделы Network и Security содержат малозначащие параметры сети Microsoft Network (интересно, в России кто-нибудь хоть когда-нибудь ею пользовался?). Software И вот, наконец, второй подраздел Software, на этот раз уже состоящий из универсальной для всех пользователей данного компьютера информации! Как и ранее, он состоит из разделов с именами компаний-производителей с подразделами внутри них, посвященных отдельным программам. В разделе HKLM\SOFTWARE\Microsoft расположены настройки самой Windows и ее компонентов, а также всех программ Microsoft. Например, в подразделе Active Setup этого раздела находятся параметры системы установки компонентов Windows через Internet - Active Setup. В его подразделе Installed Components вы увидите все компоненты Internet Explorer, которые вы выбирали (или нет) при установке этого браузера. В подразделе Shared Tools раздела HKLM\SOFTWARE\Microsoft находится список программ и библиотек пакета MS Office, которыми могут пользоваться другие компоненты этого пакета (скажем, "галерея клипов", которая может быть вызвана из любого приложения MS Office), с указанием пути к каждому из них. Но, конечно, как и в прошлый раз, самым интересным местом здесь будет подраздел Windows\CurrentVersion, относящийся к операционной системе. В самом CurrentVersion, даже не в его подразделах, есть весьма полезные параметры. Скажем, именно здесь находится информация, отображающаяся в верхней части окна Панель управления - Система - Общие. Подраздел App Paths раздела CurrentVersion - это Windows'ский аналог параметра Path из файла autoexec.bat. Можно еще назвать его реестровым собранием ярлыков программ. Здесь можно указать пути к различным программам и имена для их запуска, а затем набирать эти имена в окне "Выполнить" для запуска этих программ, не заботясь об указании пути к ним . Подраздел Explorer опять-таки посвящен программе "Проводник", но уже ее общим настройкам. В подразделах Desktop\NameSpace и Mycomputer\NameSpace находятся идентификаторы тех объектов, которые должны быть расположены на Рабочем столе и в папке "Мой компьютер", например, "Корзина" или "Удаленный доступ к сети". Вы можете удалить отсюда ненужные объекты или, наоборот, добавить сюда желаемые, создав вначале для них идентификаторы в разделе HKCR, как описано на одной из врезок. В параметрах подразделов LastCheck и LastOptimize (подраздела Explorer подраздела CurrentVersion) содержится информация о последнем моменте дефрагментации или проверки жестких дисков компьютера . В подразделе Tips вы найдете все советы, отображающиеся при первом запуске компьютера с Windows95 . Их можно просмотреть и с помощью программы welcome.exe из каталога Windows. Подраздел Fonts хранит в себе информацию об именах шрифтов и их соответствии названиям файлов. Вы, кстати, никогда не удивлялись, почему в "Проводнике" и в Norton Commander содержимое папки Windows\Fonts выглядит по-разному ? Да потому, что Norton Commander берет информацию об именах файлов в этой папке из FAT, а "Проводник" вот из этого раздела реестра. Почему копирование шрифтов в папку Fonts длится значительно дольше, чем в любую другую папку? Да потому, что еще в реестре их все надо прописать, да еще перед этим из каждого извлечь полное имя! Еще бы не дольше было… В подразделе MS-DOS Emulation, в его подразделе AppCompat находится список программ MS-DOS, которые могут работать только в режиме MS-DOS, а не в окне "Сеанс MS-DOS" и требуют выгрузки Windows для своей работы . Из следующего подраздела реестра, MS-DOSOptions, берутся параметры для диалоговых окон при настройке ярлыков программ MS-DOS для особой конфигурации режима MS-DOS. Именно с помощью этих параметров можно удобно настроить файлы autoexec.bat и config.sys для каждого ярлыка программы, работающей в режиме MS-DOS . Подразделы Run, RunServices, RunOnce, RunOnceEx, RunServicesOnce содержат в себе указания на программы, которые должны запуститься автоматически при запуске Windows. В прошлом номере уже рассказывалось про аналогичный раздел в ключе HKCU, программы в котором запускались при начале сеанса работы данного пользователя, ну а программы, указанные здесь, запустятся в любом случае. Почаще навещайте этот раздел - здесь могут прятаться "трояны"! (Три последних раздела из перечисленных запустят указанную в них программу лишь один раз.) В подразделе Time Zones приведен список настроек всех возможных часовых зон из меню настройки местного времени. (Параметры же установленной временной зоны размещаются ниже, в разделе HKLM\System\CurrentControlSet\control\TimeZoneInformation.) Подраздел Uninstall (подраздела Explorer подраздела CurrentVersion) содержит в себе пути и параметры деинсталляторов для всех программ, которые допускают такую возможность. Именно отсюда берется информация для представления в окне Панель управления - Установка и удаление программ. Параметр DisplayName определяет название программы, которое в этом окне будет отображаться . Ну а теперь закончим раздел Software\Microsoft\Windows\CurrentVersion и перейдем к самому последнему подразделу ключа HKLM - System, к его единственному подразделу CurrentControlSet. В этом подразделе содержатся два ключа: Сontrol и Services. Параметры этой части реестра не менее важны, чем, скажем, подраздела Enum, так как содержат в себе многие настройки системы. Но большая их часть - чисто служебная и изменять их через редактор реестра не стоит. Впрочем, лучше слегка пробежаться по наиболее интересным разделам. В подразделе FileSystem записаны некоторые параметры работы операционной системы с носителями с другой файловой системой вроде CD-ROM. Подраздел Keyboard layouts содержит список возможных раскладок клавиатуры и имена соответствующих им файлов с раскладками (установлены могут быть отнюдь не все эти файлы). Подраздел Nls посвящен кодовым страницам, которые поддерживаются системой. В его подразделе Codepage каждому номеру кодовой страницы (например, "1251" - кодировка Windows-1251) поставлен в соответствие файл, содержащий информацию об этой кодовой странице, а в подразделе Locale - имена этих кодовых страниц. Подраздел PerfStats посвящен состоянию системы и несколько подробнее описан ниже. Подраздел SessionManager посвящен старым приложениям MS-DOS. В подразделе CheckBadApps содержится список программ MS-DOS, которые могут быть несовместимы с Windows. Наверное, вы пробовали из-под Windows запустить Norton Commander 5.0 и получали сообщение, что программа некорректно работает в этой операционной системе ? Для каждой программы MS-DOS, при попытке запуска которой выдается такое сообщение, есть свой подраздел с именем ее запускающего файла в подразделе CheckBadApps, а в нем - параметр с именем запускающего файла , в котором указано число. Это число - указатель на номер справочного раздела в файле Apps.hlp из папки Windows\Help, в котором рассказано, почему данная программа некорректно работает в Windows. Подраздел CheckBadApps400 имеет то же самое предназначение, что и предыдущий, но в нем размещены имена программ для Windows 3.х, а не для MS-DOS. Подразделы подраздела SessionManager с буквами DLL в имени хранят в себе названия системных библиотек, с которыми работает Windows, в зависимости от имени раздела - 16- или 32-разрядных. А в подразделе WarnVerDLLs приводятся имена библиотек, совместимость которых с Windows вызывает у нее "подозрения". Подраздел TimeZoneInformation (подраздела System\CurrentControlSet\control) хранит в себе информацию о текущей временной зоне. В следующем большом подразделе HKLM\System\CurrentControlSet\Services содержится в основном служебная системная информация. Некоторые из его подразделов очень важны для системы. Подраздел Arbitrators содержит информацию программ-арбитров, о которых шла речь выше. Подраздел Class перекликается по своему содержанию с описанным выше разделом HKLM\Enum, частично беря свои данные из него, и содержит в себе информацию об установленных и распознанных устройствах. Именно из него берется информация для отображения в окне Панель управления - Система - Устройства . Основа основ компьютера — раздел устройств. Все окно «Устройства» — здесь. И даже разбиение списка устройств на ветки в этом окне такое же, как и ключей в реестре. Таким образом, этот подраздел фактически является "реестром в реестре", базой данных по устройствам, железу, установленным в компьютере. В него включена информация, поставляемая энумератором и диспетчером конфигурации и записанная в разделе HKLM\Enum, а также данные о загруженных драйверах устройств и их параметрах (к примеру, строка инициализации модема помещается в ключе Class\Modem\0000\Init). Вспомните, кстати, что в Enum'е были ссылки на драйверы устройств вида Driver = DiskDrive\0001. Так вот это были ссылки именно на подразделы данного раздела Class, в чем нетрудно убедиться. В разделах HKLM\System\CurrentControlSet\Services\Class и HKLM\Enum размещается информация лишь об имеющихся устройствах, об их характеристиках и назначенных ресурсах. Информация же о конкретной работе устройств, о том, исправны они или нет, находится в разделе реестра HKDD, который постоянно загружен в оперативной памяти. Остальная часть раздела HKLM\System\CurrentControlSet\Services содержит данные некоторых программ и особого интереса для пользователя не представляет. HKEY_USERS , HKEY_CURRENT_CONFIG и HKEY_DYN_DATA Общий модуль HKEY_USERS - второй "реальный" раздел реестра. Он состоит из одного или двух больших подразделов. В любом случае один из них называется .Default и является разделом HKCU для конфигурации пользователя Windows по умолчанию (если в Windows зарегистрировано несколько пользователей, то ее можно загрузить, нажав Esc при запросе пароля на входе в Windows). Если в Windows зарегистрирован один пользователь, то раздел Default будет единственным и совпадать с HKCU ,а если нет, то в HKU будет еще один раздел, чье имя будет совпадать с именем текущего пользователя, и именно этот раздел будет отражен в реестре еще раз под именем HKCU. Ключи конфигурации HKEY_CURRENT_CONFIG - это описание текущей конфигурации оборудования компьютера. Этот раздел является отражением одной из ветвей раздела HKLM\Config , в котором описаны все созданные в системе конфигурации оборудования. Сами они создаются с помощью диалогового окна Панель управления - Система - Конфигурации. Когда конфигурация меняется, меняется и содержимое раздела HKCC - он начинает "отражать" уже другую ветвь раздела HKLM\Config. Назначение отдельных разделов и параметров этого ключа практического интереса не представляет, так как редактировать эти данные лучше "законным" способом - с помощью диалоговых окон. Единственным следствием из всей этой информации может быть совет восстановить реестр из резервной копии, если в результате ваших экспериментов с созданием конфигураций компьютер стал неработоспособным. Железный ключ HKEY_DYN_DATA - пожалуй, самый недокументированный раздел реестра. Отчасти это объясняется тем, что данные в этом разделе создаются и корректируются автоматически. Любое вмешательство пользователя может лишь нарушить работу компьютера,- здесь нет ничего такого, что требовало бы необходимости редактирования через Редактор реестра. Интерес этот раздел представлял, скорее всего, лишь для разработчиков самой Windows на стадии ее отладки, а также, может быть, для разработчиков драйверов различных устройств компьютера. Но так как уж он присутствует в системном реестре, то и программа regedit.exe его отображает. В отличие от всех остальных разделов, содержимое которых хранится в файлах системного реестра на жестком диске и загружается в оперативную память лишь в случае необходимости его считывания или изменения, все данные HKEY_DYN_DATA при загрузке операционной системы размещаются в оперативной памяти и находятся там вплоть до завершения работы операционной системы. В разделе HKEY_DYN_DATA находятся два подраздела. Первый из них, HKDD\Config Manager\Enum посвящен состоянию железа компьютера. Если в разделе HKLM\System\CurrentControlSet\Services\Class расположена информация о том, какие устройства установлены в компьютере, то в этом разделе - данные о том, как они работают: исправно или нет. Информация в окне Панель управления - Система - Устройства формируется из содержимого обоих разделов. Второй же раздел, PerfStats - это раздел статистики. Он связан (но не является отражением, как, скажем, HKCR) с разделом HKLM\System\CurrentControlSet\control\PerfStats и содержит статистическую информацию по его параметрам. Можно сказать, что в HKLM\System\CurrentControlSet\control\PerfStats перечислены параметры статистики системы, а в HKEY_DYN_DATA\PerfStats - их значения. Именно отсюда берет свои данные программа "Системный монитор". Назначение раздела HKDD - постоянно находиться в оперативной памяти и поставлять системе информацию о состоянии устройств компьютера по первому ее требованию. Чтобы в этом случае не пришлось ничего загружать в память, а все там уже было. Можно было бы, конечно, перенести всю эту информацию в раздел HKLM, в соответствующие ключи, но тогда быстродействие системы бы серьезно замедлилось. А так - раздел не очень большой и не содержит в себе ничего, кроме данных для системы: ни названий, ни пояснений. Чисто служебная информация. Возможно, конечно, что ваш реестр в деталях несколько отличается от структуры, которая была здесь описана. Это вполне естественно, так как содержимое реестра во многом зависит от набора программ, установленных на компьютере, да и от самой операционной системы. В WinNT\2K реестр весьма разнится от реестра операционных систем типа Win9x. Наличие или отсутствие установленных Microsoft Internet Explorer и Microsoft Office сильно влияют на состав реестровых ключей и параметров. Но общий план всегда одинаков. Куски реестра в файлах При экспортировании фрагмента реестра или его всего на жестком диске создается обычный текстовый файл с расширением .reg. Файл реестра имеет жестко регламентированную структуру В начале любого файла с частью реестра должна находиться строка Regedit4. Строго говоря, без этой строки файл не может считаться экспортированным фрагментом реестра и превращается в простой текстовый. Дело в том, что файл реестра может быть импортирован назад в реестр не только с помощью Редактора реестра, но и путем простого двойного клика мышью на нем. По умолчанию для файлов с расширением .reg установлена команда внесения их содержимого в реестр, если файл оформлен правильно. Ниже команды Regedit4 находятся ключи, вносимые в реестр. Для каждого вносимого в реестр имени раздела должна быть выделена отдельная строка. Полное имя раздела (сокращения не допускаются) помещается в квадратные скобки. Имена параметров этого раздела приводятся по одному на строке, начиная за следующей сразу за именем раздела, в кавычках, рядом на той же строке - их значения. Значения строковых параметров должны приводиться в кавычках, значения параметров типа Dword - в виде шестнадцатеричной строки dword:00000000 (без кавычек), значения двоичных параметров - в шестнадцатеричной системе в виде строки hex:14,00,00,00 (без кавычек). Если в значении строкового параметра встречается символ "\", то он заменяется (в экспортированном файле реестра) на пару таких символов. Сам символ "\" используется для переноса слишком длинных строк. Имя каждого раздела или подраздела, вносимого в реестр, независимо от его иерархического расположения, должно писаться полностью и на отдельной строке. Между описаниями каждого из разделов и в конце файла должно находиться по одной пустой строке. Символ "@" соответствует параметру "По умолчанию". С помощью такого файла можно также и удалять записи из системного реестра. Для этого нужно перед именем раздела поставить знак "-": "[-HKEY_LOCAL_MACHINE\……..]". Если хотите более подробно поисследовать формат файлов .reg, экспортируйте какой-нибудь большой раздел в такой файл и посмотрите, что у вас получилось. Конечно, хотелось бы узнать поподробнее про другие разделы, выяснить, где прячутся интересные настройки… Можно поискать книжки, полазить по Internet. Но это все дорого и сложно. А ведь между тем у вас есть все инструменты для того, чтобы системный реестр открывал перед вами все свои новые тайны. Этот инструмент - ваши глаза и руки, ваш разум и ваша память. Наблюдайте, исследуйте, делайте выводы, экспериментируйте (естественно, приняв все меры предосторожности!),- и тогда вы не на чьих-то словах, а на собственном опыте узнаете и откроете многие новые секреты этого недокументированного сердца Windows - системного реестра. |