Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Структура и архитектура реестра Windows

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> Windows
 
Автор Сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Сб Июн 16, 2007 12:50 pm    Заголовок сообщения: Структура и архитектура реестра Windows
Ответить с цитатой

Структура и архитектура реестра Windows

Раздел посвященный теоретической части: что вообще такое реестр и как с ним грамотно работать. Прежде чем пытаться что-либо менять в реестре почитайте эти статьи, чтобы потом не было мучительно больно Smile.

Что такое реестр?
Редактор RegEdit и структура реестра
Восстановление реестра
Структура reg-файлов
Структура реестра

Что такое реестр? Общая теория
В последнее время из уст молодых людей, пользующихся компьютером, можно частенько услышать фразы типа "Windows - MUST DIE, UNIX - COOL". Причем кричат об этом, как правило, люди сидящие под этим самым Windows-ом, а UNIX видевшие пару раз у соседа-программера. В чем же причина такой "нелюбви" к самой распространенной операционной системе? Многие скажут, что проблема Windows в огромном количестве дырок, служащих для атаки хакеров на удаленные машины. Но ведь в UNIX-системах дырок ничуть не меньше, и неграмотно настроенный UNIX можно сравнить с решетом. Другое дело, что по настройке UNIX можно найти множество документации, грамотно объясняющей, как эти самые дыры залатать. Беда Windows в недостаточной документированности (не считать же справочную информацию, встроенную в Окна, ее заменителем). И разработчики упорно скрывают от пользователей самые интересные возможности операционной системы.

Очень немногие пользователи Windows знают, что есть возможность настроить практически все параметры оболочки. Причем эти настройки зачастую невозможно подкорректировать стандартными средствами и инструментами самой операционной системы. И большинство настроек Windows хранятся в реестре.

Реестр - база данных операционной системы, содержащая конфигурационные сведения. Физически вся информация реестра разбита на два файла: SYSTEM.DAT и USER.DAT, находящиеся в каталоге Windows. Реестры Windows 9х и NT частично различаются. Информация, приведенная в этом разделе по большей части относится к версии 9х и ME, если это не оговаривается отдельно. Но, все же, различия не настолько кардинальны и большая часть информации будет справедлива и для Windows NT.

В современном виде реестр впервые появляется в Windows 95 (в Windows 3.1 был только файл REG.DAT, содержащий информацию, которая сейчас расположена в разделе HKEY_CLASSES_ROOT). По замыслу Microsoft он должен был полностью заменить файлы ini, хранящие всю настроечную информацию. И по заверениям разработчиков файлы ini оставлены только для совместимости со старыми программами, ориентированными на более ранние версии операционной системы. В действительности это не совсем так и часть настроек по-прежнему хранится в этих файлах. По рекомендациям Microsoft, сторонние разработчики программного обеспечения должны хранить настроечную информацию также в реестре. Таким образом, в нем хранится информация по аппаратной конфигурации компьютера, различные настройки операционной системы и настройки программ, которые Вы устанавливаете.

Так почему все-таки произошел переход от ini файлов к реестру? Дело в том, что на эти файлы накладывается ряд серьезных ограничений, и главное из них состоит в том, что предельный размер такого файла составляет 64Кб. К тому же информация в них плохо структурирована в отличие от реестра.

Нужно ли простому пользователю разбираться в реестре? В большинстве случаев, когда все функционирует нормально, необходимости заглядывать туда нет. Но иногда возникают ситуации, требующие непосредственного вмешательства в эту базу данных и тогда надо иметь хотя бы приблизительное представление о структуре реестра, его функционировании, месторасположении различной информации и принципов работы с ней.

ПРЕДУПРЕЖДЕНИЕ: НИКОГДА не удаляйте или не меняйте информацию в реестре, если Вы не уверены что это именно то, что нужно. В противном случае некорректное изменение данных может привести к сбоям в работе Windows и, в лучшем случае, информацию придется восстанавливать из резервной копии.

Надеюсь Вы прониклись идеей необходимости изучения этого интересного и важного вопроса. Да? Тогда в путь Smile.

Редактор RegEdit и структура реестра
Основным средством для просмотра и редактирования записей реестра служит специализированная утилита "Редактор реестра". Для ее запуска наберите в запуске программы (Пуск->Выполнить) команду regedit. Откроется окно программы, в которой слева отображается дерево реестра, похожее по виду на отображение структуры диска в Проводнике, а справа выводятся ключи, содержащиеся в выбранном (активном) разделе. С помощью редактора Вы можете редактировать значения, импортировать или экспортировать реестр, осуществлять поиск. Интерфейс и меню программы до боли знакомо любому пользователю Windows, и я думаю, что останавливаться на нем подробно не стоит, т.к. его освоение не составит никакого труда.

Чему действительно необходимо уделить внимание, так это структуре реестра. Он содержит шесть корневых разделов (ветвей), на которых ниже остановимся подробнее, каждый из них включает подразделы, отображаемые в левой части окна в виде значка папки. Конечным элементом дерева реестра являются ключи или параметры, делящиеся на три типа:
строковые (напр. "C:\Windows");
двоичные (напр. 10 82 A0 8F). Максимальная длина такого ключа 16Кб;
DWORD. Этот тип ключа занимает 4 байта и отображается в шестнадцатеричном и в десятичном виде (напр. 0x00000020 (32) - в скобках указано десятичное значение ключа).

Давайте теперь рассмотрим корневые разделы, точнее какая информация в них содержится. Итак, начнем по порядку:

HKEY_CLASSES_ROOT. В этом разделе содержится информация о зарегистрированных в Windows типах файлов, что позволяет открывать их по двойному щелчку мыши, а также информация для OLE и операций drag-and-drop;

HKEY_CURRENT_USER. Здесь содержатся настройки оболочки пользователя (например, Рабочего стола, меню "Пуск", ...), вошедшего в Windows. Они дублируют содержимое подраздела HKEY_USER\name, где name - имя пользователя, вошедшего в Windows. Если на компьютере работает один пользователь и используется обычный вход в Windows, то значения раздела берутся из подраздела HKEY_USERS\.DEFAULT;

HKEY_LOCAL_MACHINE. Этот раздел содержит информацию, относящуюся к компьютеру: драйверы, установленное программное обеспечение и его настройки;

HKEY_USERS. Содержит настройки оболочки Windows для всех пользователей. Как было сказано выше, именно из этого раздела информация копируется в раздел HKEY_CURRENT_USER. Все изменения в HKCU (сокращенное название раздела HKEY_CURRENT_USER) автоматически переносятся в HKU;

HKEY_CURRENT_CONFIG. В этом разделе содержится информация о конфигурации устройств Plug&Play и сведения о конфигурации компьютера с переменным составом аппаратных средств;

HKEY_DYN_DATA. Здесь хранятся динамические данные о состоянии различных устройств, установленных на компьютере пользователя. Именно сведения этой ветви отображаются в окне "Свойства: Система" на вкладке "Устройства", вызываемого из Панели управления. Данные этого раздела изменяются самой операционной системой, так что редактировать что-либо вручную не рекомендуется.

Наибольший интерес представляют ветви HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE. Именно там хранятся настройки, позволяющие привести Вашу операционную систему в надлежащий вид Smile. Поэтому, почти все внимание в дальнейших статьях будет посвящено именно этим ветвям реестра.

Восстановление реестра
При работе с реестром надо соблюдать осторожность. Удаление каких-либо важных данных случайно или по незнанию может привести к краху операционной системы. Тогда спасти положение может только восстановление последней работоспособной копии.

Если Вы собрались поэкспериментировать с реестром, предварительно сохраните на диске файлы SYSTEM.DAT и USER.DAT. Они находятся в каталоге, куда была установлена операционная система и имеют атрибуты "только для чтения" и "скрытый". В случае если реестр будет серьезно испорчен, Вы сможете переписать эти файлы в каталог Windows, установить нужные атрибуты и реестр будет как новенький. Только не вздумайте восстанавливать эти файлы, когда загружен Windows, иначе система накроется окончательно и спасет ее только полная переустановка! Для восстановления этих файлов надо предварительно перезагрузиться в DOS и уже там заменять испорченные файлы хорошими.

Но это не единственный вариант восстановления данных. Дело в том, что операционная система, при каждом удачном запуске сохраняет копию реестра в CAB-файле, который записывается в скрытый каталог SYSBCKUP каталога Windows. По умолчанию, хранятся последние пять копий. Это число может варьироваться от 0 до 99 и устанавливается значением ключа MaxBackupCopies в файле scanreg.ini в каталоге Windows. Правда не стоит устанавливать слишком большое значение, т.к. файлы занимают немало места (один файл имеет размер больше мегабайта).

Чтобы восстановить реестр с одной из этих резервных копий надо перезагрузиться в DOS и выполнить команду

SCANREG /RESTORE
Появится список доступных резервных копий реестра отсортированных по времени их создания. После выбора нужной копии данные будут благополучно восстановлены, и Вы получите реестр, отвечающий состоянию дел на момент его создания.

Но если Вы устанавливали какие-то программы или меняли настройки операционной системы в промежуток между последней резервной копией и сбоем в реестре, то все эти данные безвозвратно пропадут. Надо ли нам это? Однозначно нет! Чтобы в любое время создать резервную копию реестра воспользуйтесь командой

SCANREG /BACKUP
которая в случае нормально прошедшей проверки создаст резервную копию.

Еще один вариант резервирования и восстановления реестра состоит в экспортировании раздела или целой ветви, которую Вы планируете изменять. Это можно осуществить в Regedite для Windows в меню "Реестр". Выделите нужный раздел и щелкните по пункту "Экспорт файла реестра". После задания имени файла данные этого раздела будут в него экспортированы. Файл имеет расширение REG. Для его импортирования в реестр достаточно дважды щелкнуть на нем и данные будут перенесены. Правда этот способ восстановления информации имеет один существенный недостаток: все удаленные или измененные записи будут восстановлены, но вот добавленные записи удалены не будут. Поэтому данный способ больше подходит, если Вы проводите какие-то несущественные изменения, и чтобы откатить их не вводя старые данные заново, можно воспользоваться экспортом/импортом.

Вообще, работать с реестром надо крайне осторожно, но если Вы будете периодически резервировать его, то никаких проблем возникнуть не должно.

Структура reg-файлов
Знание реестра Windows будет не полным без умения написать reg-файл. Начнем с того, что это такое. Reg-файл - это файл, имеющий определенную структуру и содержащий информацию, которая может быть импортирована в реестр. Если была заблокирована работа с редактором реестра (как это сделать, можно прочитать в статье http://www.winhowto.ru/reg_n3.shtml), то наиболее легким способом подредактировать реестр будет создание и импортирование reg-файла (конечно, можно выйти в DOS, в защищенный режим, воспользоваться другими программами, но это все гораздо сложнее, а главное дольше).

К reg-файлам предъявляются определенные требования по структуре. Начнем с того, что в первой строке файла обязательно должно быть введено

REGEDIT4
Обратите внимание на то, что буквы должны быть большие. Кроме этого в первой строке ничего быть не должно. После этого текста ОБЯЗАТЕЛЬНО должна быть пустая строка. Затем, указывается раздел реестра, в котором надо прописать или изменить какие-то параметры. Название раздела должно быть заключено в квадратные скобки [...]. Ниже прописываются параметры, которые надо добавить, по одному параметру в строке. Если вам надо провести изменения в нескольких разделах, то вы должны оставлять одну пустую строку между последним параметром предыдущего раздела и названием следующего раздела. Может немного запутанно, но вот как это должно выглядеть:

REGEDIT4

[Razdel1]
"param1"="znachenie1"
"param2"="znachenei2"
"param3"="znachenie3"

[Razdel2]
"param_1"="znachenie_1"

Последняя строка в файле должна быть ПУСТОЙ. После того, как вы создали такой файл, просто запустите его как обычную программу, вам будет выдан запрос о необходимости провести изменения в реестре, и после положительного ответа информация из файла будет импортирована. О результатах импортирования Windows сообщит в появившемся после этого окне.

Теперь пару слов о параметрах, которые можно добавлять. Как вы, наверное, обратили внимание, в приведенном выше примере добавляются параметры с помощью строк типа "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://www.winhowto.ru/"

По-моему все очень просто и понятно. Но есть у reg-файлов одна особенность: с помощью них нельзя удалять параметры в реестре, правда, можно удалить раздел целиком. Для удаления раздела из реестра надо перед его именем в квадратных скобках поставить символ "-". Вот как это выглядит: [-HKEY_LOCAL_MACHINE\Software\QuickSoft\QuickStart]

Благодаря этой записи, подраздел "QuickStart" из раздела "QuickSoft" будет удален со всем содержимым. Однако, как быть с параметрами? Ведь их удалять нельзя. Так, установка ограничений на доступ к различным настройкам оболочки Windows, как описано в статье (http://www.winhowto.ru/reg_n7.shtml), производится с помощью параметров типа DWORD. При этом, если значение параметра равно 1 (00000001), то ограничение включено, а если равно 0 (00000000), то ограничение отключено. Таким образом, параметры удалять вовсе не обязательно, достаточно просто присвоить им значения равные нулю.

Замечание по поводу удаления, сделанное Николаем Басмановым:
При помощи REG-файлов можно удалять параметры. Синтаксис:

REGEDIT4

[HKEY_CURRENT_USER\Software]
"xxx"=-

Вот, пожалуй, вся основная информация по структуре reg-файлов. Рекомендую еще попробовать поэкспортировать из реестра какие-нибудь разделы (не очень большие с маленькой вложенностью), чтобы лишний раз посмотреть структуру файлов. Это никогда не помешает. Теперь вы и сами сможете с легкостью вносить изменения в реестр с помощью reg-файлов.

Структура реестра
Статья взята с сайта http://paullee.ru, автор General Paul Lee Corruption.

Сегодня мы поговорим о том, что многие называют "помойной ямой" Windows, а именно о реестре. Многие уже научились работать с содержимым реестра: менять параметры системы, извлекать полезную информацию и т.д. - но не все знают, что же представляет из себя реестр Windows "изнутри".

В системе Win95/98 (о ней сегодня пойдет речь) реестр хранится в двух файлах SYSTEM.DAT и USER.DAT. Как их найти. В корневом каталоге загрузочного диска имеется файл установок командного процессора MSDOS.SYS, в разделе [Paths] которого следует отыскать переменную WinDir. Ее значение - каталог с установленной Win95/98, в нем и находятся интересующие нас файлы. Надо заметить, что они имеют атрибут Hidden (скрытый) и Read only (только для чтения).

Что же представляет из себя файл реестра? Это файл данных древовидной структуры, состоящий из трех основных частей: заголовка, индекса, и данных, которые могут располагаться в одном или нескольких блоках.

Заголовок - запись размером 20h (32) байта имеет следующий вид:

00h: 4 байта - "CREG" сигнатура заголовка реестра
08h: двойное слово - адрес первого блока данных
10h: слово - количество блоков данных

Индекс - список ссылок на элементы реестра (на его ветви), имеет свой подзаголовок размером в 10h байт:

00h: 4 байта - "RGKN" сигнатура индекса реестра
04h: двойное слово - размер индекса
08h: слово - относительное смещение адреса в файле
(обычно равно 20h - размер заголовка реестра)
0Ch: двойное слово - количество записей в индексе

Далее идут записи индекса следующей структуры:

00h: двойное слово
04h: двойное слово - контрольная сумма ключа
(сумма всех букв имени ключа в верхнем регистре)
08h: двойное слово
0Ch: двойное слово - указатель на предка
10h: двойное слово - указатель на потомка
14h: двойное слово - указатель на следующий ключ этого уровня
18h: слово - номер блока данных, в котором находится ключ
1Ah: слово - номер (не порядковый!) ключа в блоке данных

Таким образом, мы видим, что в индекс представляет собой каркас дерева, которое может состоять из (0FFFFFFFFh-10h)/1Ch=9249248h (153391688) элементов (где 0FFFFFFFFh - максимальный размер индекса, 10h - подзаголовок индекса, 1Ch размер записи в индексе), с условием того, что индекс в файле может быть только один (?).

Все данные (имена ключей, их параметры и значения параметров) находятся в блоках данных. Исходя из размера отведенного под количество этих блоков в заголовке файла реестра, видно, что их может быть не более 64k (65536). Хотя, как дальше будет видно, под размер самого блока данных отведено двойное слово, мне лично не довелось встречать блоки больше 0F000h байт. Если принять этот факт за правило, то не трудно вычислить максимальный размер файла реестра ~7,75Gb. Если же использовать возможности по "раздутию" файла на полную катушку, то размер одного файла может достичь совершенно немыслимых размеров ~256Tb.

Итак, блоки данных. Каждый блок данных имеет свой подзаголовок:

00h: 4 байта - "RGDB" сигнатура блока данных
04h: двойное слово - размер блока данных
08h: двойное слово - размер свободного раздела в блоке
0Ch: слово - (Cool
0Eh: слово - номер блока данных
10h: двойное слово - указатель на свободный раздел
14h: слово - количество разделов в блоке (включая свободный раздел)
16h: слово - свободный номер для создания элемента
18h: 8 байт - выравнивание

Для каждого нового элемента создается свой раздел, начиная с начала свободного раздела. При удалении раздела данные в блоке сдвигаются, заполняя собой освободившееся место и увеличивая, тем самым, свободный раздел. При уменьшении размера информации внутри раздела, место не освобождается, а только меняется реальный размер записи (см. далее).

Записи в блоке данных имеют следующую структуру:

00h: двойное слово - размер записи
04h: слово - номер записи в блоке
06h: слово - номер блока данных
08h: двойное слово - реальный размер записи
0Ah: слово - размер имени ключа (n)
0Ch: слово - количество параметров
0Eh: n байт - имя ключа
0Eh+n: - информация о параметрах:

00h: двойное слово - тип параметра
04h: двойное слово (?)
08h: слово - размер имени параметра (n)
0Ah: слово - размер значения параметра (m)
0Ch: n байт - имя параметра
0Ch+n: m байт - значение параметра

Информация о параметрах записывается один за другим, без какого-либо разделения. Если у параметра отсутствует имя (размер равен нулю), то он считается параметром "по умолчанию" для этого ключа.

Программа редактирования реестра RegEdit предоставляет возможность создания параметров лишь трех типов (1, 3, 4), хотя Windows позволяет хранить до 65536 типов параметров.

ПРИЛОЖЕНИЕ 1

Типы параметров зарезервированные в MSDE

0 - REG_NONE Неопределенный тип
1 - REG_SZ Строка, заканчивающаяся нулем
2 - REG_EXPAND_SZ Строка, заканчивающаяся нулем (со ссылками на переменные окружения)
3 - REG_BINARY Двоичный тип
4 - REG_DWORD или REG_DWORD_LITTLE_ENDIAN Двойное слово
5 - REG_DWORD_BIG_ENDIAN Двойное слово
6 - REG_LINK Символическая связь (Symbolic Link)
7 - REG_MULTI_SZ Многостроковый параметр (строки разделены конечными нулями)
8 - REG_RESOURCE_LIST Представление ресурса в виде карты ресурса (Resource list in the resource map)
9 - REG_FULL_RESOURCE_DESCRIPTOR Представление ресурса в виде аппаратного описания (Resource list in the hardware description)
10 - REG_RESOURCE_REQUIREMENTS_LIST


ПРИЛОЖЕНИЕ 2

Схематичное представление структуры файла реестра

Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Сб Июн 16, 2007 12:54 pm    Заголовок сообщения:
Ответить с цитатой

Вот еще:

http://thenewz.info/forum/lofiversion/index.php/t2072.html
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> Windows Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис