Европейский Союз (European Union)
АРХИТЕКТУРА
СИСТЕМНОГО РЕЕСТРА WINDOWS
1.ТИПЫ ДАННЫХ
Конечным элементом дерева реестра являются ключи или
параметры.
Все параметры реестра имеют фиксированный тип. В табл.1
приведен полный список используемых типов. Не все из них используются в разных
версиях Windows. Например, REG_QWORD явно предназначен для 64-битной версии XP.
Кроме того, сохраняется преемственность поколений Windows – в более поздних
версиях используются все типы ранних версий. Также следует учесть, что ряд
типов используется только системой в некоторых разделах, и создать свой
параметр такого типа с помощью редактора реестра не получится.
Таблица 1
Типы параметров
№ п/п
|
Тип данных
|
Описание
|
Windows 9x
|
|
REG_BINARY
|
Двоичные данные. Большинство сведений об аппаратных
компонентах хранится в виде двоичных данных и выводится в редакторе реестра в
шестнадцатеричном формате. Максимальная длина такого ключа 16Кб.
|
|
REG_DWORD
|
Данные, представленные целым числом (4 байта). Многие
параметры служб и драйверов устройств имеют этот тип и отображаются в
двоичном, шестнадцатеричном или десятичном форматах
|
|
REG_SZ
|
Текстовая строка фиксированной длины (например,
"C:\Windows")
|
Windows XP
|
|
REG_EXPAND_SZ
|
Строка Unicode переменной длины. Этот тип данных включает
переменные, обрабатываемые программой или службой
|
|
REG_MULTI_SZ
|
Многострочный текст Unicode. Этот тип, как правило, имеют
списки и другие записи в формате, удобном для чтения. Записи разделяются
пробелами, запятыми или другими символами
|
|
REG_DWORD_LITTLE_ENDIAN
|
32-разрядное число в формате “остроконечников” — младший
байт хранится первым в памяти. Эквивалент REG_DWORD
|
|
REG_DWORD_BIG_ENDIAN
|
32-разрядное число в формате “тупоконечников” — старший
байт хранится первым в памяти
|
|
REG_LINK
|
Символическая ссылка Unicode. Только для внутреннего
использования (некоторые корневые разделы являются такой ссылкой на другие
подразделы)
|
|
REG_NONE
|
Параметр не имеет определенного типа данных
|
Windows XP (только в разделе HKLM\HARDWARE)
|
|
REG_RESOURCE_LIST
|
Список аппаратных ресурсов.
|
|
REG_FULL_RESOURCE_DESCRIPTOR
|
Дескриптор (описатель) аппаратного ресурса.
|
|
REG_RESOURCE_REQUIREMENTS_LIST
|
Список необходимых аппаратных ресурсов.
|
Windows Vista
|
|
REG_QWORD
|
64-разрядное число
|
|
REG_QWORD_LITTLE_ENDIAN
|
64-разрядное число в формате “остроконечников”. Эквивалент
REG_QWORD
|
Ограничения на имена ключей.
Имена ключей не могут содержать:
обратные слеши (\),
пробелы ( ),
звездочки ( * )
вопросительные знаки (?).
Имя ключа не должно совпадать с именами ключей, располагающихся
выше него по иерархии.
Имеется три типа системных элементов
реестра, каждый из которых является корневым и имеет собственную иерархию:
TypeLib,
Interface,
CLSID.
1. Иерархия TypeLib идентифицирует положение
инсталлированных в данный момент библиотек типов, которые являются базами
данных, описывающими содержимое компонентов OLE. Широко используемая для
поддержки автоматизации библиотека типов описывает прототипы функций для всех
поддерживаемых интерфейсов, а также включает в себя ссылки на файлы-подсказки,
и поэтому инструменты разработки могут вызвать соответствующую страницу
подсказки и помочь создателям макрокоманд правильно воспользоваться серверами
автоматизации.
2. Иерархия Interface содержит список, отсортированный по
идентификаторам интерфейса, всех инсталлированных в системе интерфейсов. Это дает
возможность прочитать имя интерфейса (IUnknown, IMalloc и т. д.) и подробности
о каждом интерфейсе (количество функций в каждом интерфейсе и его базовый
класс).
3. Иерархия CLSID детализирует все инсталлированные в
данный момент (открытые) компоненты OLE. CLSID — это идентификатор класса. CLSID
обеспечивает связь между компонентами. Соединение с конкретным интерфейсом
конкретного компонента требует сначала идентифицировать CLSID для доступа к
компоненту, а затем IID для получения желаемого интерфейса. Так же, как и
идентификаторы интерфейсов (типы данных IID и REFIID), идентификаторы классов
(типы данных CLSID и REFCLSID) являются 128-разрядными (16 шестнадцатеричных
цифр) числами, обеспечивающими машинный способ точной идентификации класса
компонента. Также, как тип IID, CLSID имеет тип GUID:
typedef struct_GUID
{ DWORD Data1;
WORD Data2 ;
WORD Data3;
BYTE Data4[8];
}GUID;
Из этих трех типов элементов самым важным является
элемент идентификатор класса, поскольку детали модуля компонента (файл с расширением
.DLL или .EXE) хранятся в иерархии CLSID.
Например, следующий элемент реестра делает доступным
компонент библиотеки PUBMEM:
HKEY_CLASSES_ROOT\CLSID\
{308D0430 – 1090 – 11cf – B92A –
00AA006238F8}\
InprocServer32 =
C:\PETZOLD\CHAP20\PUBMEM.DLL
InprocServer32 означает, что файл, на который ссылаются,
является 32-разрядным файлом с расширением .DLL.
2. ХРАНЕНИЕ РЕЕСТРА
Ранее была рассмотрена логическая структура реестра, но
существует ещё и физическая структура, сохраняющая различные части реестра в
отдельных файлах. Хранение реестров разных версий Windows имеют различия.
В Windows ХР реестр содержится в двух файлах SYSTEM.DAT и
USER.DAT, находящиеся в каталоге Windows. В Windows Me был добавлен еще один
файл CLASSES.DAT.
Таблица 2
Ульи реестра
Улей
|
Расположение
|
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 для Windows 2000 (отсутствует
в XP).
LOG — журнал транзакций, в котором регистрируются все
изменения реестра.
SAV — копии ульев в том виде, в котором они были после
завершения текстовой фазы установки.
Пользователи Windows 98 могут провести параллель между
файлами с расширением .sav и файлом System.1st.
На рис.1 показаны взаимосвязи между кустами реестра и
соответствующими им файлами. На рисунке показан каталог
%SYSTEMROOT%\System32\Config, в котором содержатся файлы кустов с настройками
для компьютера. Из рис.1 видно, что Windows сохраняет содержание подраздела
HKLM\SOFTWARE в файле куста, который называется Software.
Рис.1. Взаимосвязи между кустами реестра и соответствующими им файлами
3. ФАЙЛ РЕЕСТРА
Знание реестра Windows будет не полным без умения
написать reg-файл. Начнем с того, что это такое. Reg-файл - это файл, имеющий
определенную структуру и содержащий информацию, которая может быть
импортирована в реестр. Если была заблокирована работа с редактором реестра, то
наиболее легким способом подредактировать реестр будет создание и импортирование
reg-файла.
К reg-файлам предъявляются определенные требования по
структуре. Начнем с того, что в первой строке файла обязательно должно быть
введено (для Windows ХР) REGEDIT4 или (для Windows 2000/XP) Windows Registry
Editor Version 5.00.
Обратите внимание на то, что буквы должны быть большие.
Кроме этого в первой строке ничего быть не должно. После этого текста ОБЯЗАТЕЛЬНО
должна быть пустая строка.
Затем, указывается раздел реестра, в котором надо
прописать или изменить какие-то параметры. Название раздела должно быть
заключено в квадратные скобки [...]. Ниже прописываются параметры, которые надо
добавить, по одному параметру в строке. Если надо провести изменения в
нескольких разделах, то должны оставлять одну пустую строку между последним
параметром предыдущего раздела и названием следующего раздела. Может немного
запутанно, но вот как это должно выглядеть:
REGEDIT4
[Razdel1]
"param1"="znachenie1"
"param2"="znachenei2"
"param3"="znachenie3"
[Razdel2]
"param_1"="znachenie_1"
Последняя строка в файле должна быть ПУСТОЙ. После того,
как создали такой файл, просто запустите его как обычную программу, вам будет
выдан запрос о необходимости провести изменения в реестре, и после положительного
ответа информация из файла будет импортирована. О результатах импортирования
Windows сообщит в появившемся после этого окне.
Windows 2000/XP обладает обратной совместимостью и может
обрабатывать файлы, созданные в Windows 9x. Но если вы экспортировали файл в
Windows XP и перенесли его на Windows 9x, то вручную измените первую строчку на
REGEDIT4
Теперь пару слов о параметрах, которые можно добавлять.
Как вы, наверное, обратили внимание, в приведенном выше примере добавляются
параметры с помощью строк типа "param1"="znachenie1". Т.е.
таким образом добавляется СТРОКОВЫЙ параметр с именем "param1" и
значением "znachenie1". Но ведь существуют еще и параметры двоичные и
DWORD. Формат записи для их добавления несколько другой. Для параметров типа
DWORD используется строка
"param"=dword:XXXXXXXX
Здесь "param" - имя параметра, dword -
указывает на тип этого параметра (буквы должны быть обязательно маленькие!) и
после двоеточия следует значение из восьми цифр в шестнадцатеричном (!)
формате. Однако большинство параметров DWORD имеют значение либо 0, либо 1,
значит, вы должны написать соответственно либо 00000000, либо 00000001 вместо
значков ХХХХХХХХ. Пробелы в строке не допускаются.
Для добавления двоичного параметра формат записи
несколько иной:
"param"=hex:XX,XX,XX,....
Теперь расшифруем эту строку. С названием параметра все
ясно, после знака "=" идет hex, т.е. указывается, что это будет
двоичный параметр, затем идут шестнадцатеричные числа, отделенные запятой.
Например, если надо добавить двоичный параметр равный "be 00 00 00",
то пишется строка
"param"=hex:be,00,00,00
В реестре существуют параметры "По умолчанию"
("Default"). Чтобы присвоить им какое-то значение через reg-файл,
надо добавить такую строку:
@="znachenie"
Здесь значок @ показывает, что у нас присваивается
значение параметра "По умолчанию". Обратите внимание на то, что он не
заключается в кавычки.
Теперь приведу пример простенького reg-файла, который
прописывает в реестр сайт, устанавливающий домашнюю страничку в Internet
Explorer'e:
REGEDIT4
[HKEY_CURRENT_USER\Software\ Microsoft\Internet
Explorer\Main]
"Start Page" =
"http://winchanger.narod.ru/"
Удаление параметров
С помощью reg-файлов можно не только устанавливать новые
параметры, но и удалять их. Например, для удаления раздела из реестра надо
перед его именем в квадратных скобках поставить символ "-". Вот как
это выглядит:
[-HKEY_LOCAL_MACHINE\Software\QuickSoft\QuickStart]
Благодаря этой записи, подраздел "QuickStart"
из раздела "QuickSoft" будет удален со всем содержимым.
Для удаления отдельных параметров используйте следующий
синтаксис:
REGEDIT4
[HKEY_CURRENT_USER\Software]
"xxx"= —
Параметры командной строки
Редактор реестра можно запускать с некоторыми ключами
/s (импортирует значения из reg-файла без вывода
диалогового окна)
/e (экспортирует параметры в reg-файл. Пример: regedit /e myfile.reg HKEY_USERS\.DEFAULT