Продолжение. Начало см. здесь
Кусты
Как уже говорилось ранее, компонент исполнительной системы, который и реализует сам реестр операционных систем Windows, располагается на диске не одним файлом, а в виде набора нескольких файлов, которые называются кустами (в некоторой документации вы можете увидеть название «улей», что является синонимом. Сам термин hive переводится как «куст» или «улей»). В каждом кусте размещена группа разделов, называемая деревом реестра, где начальная точка дерева имеет название корня, под которым уже находятся прочие подразделы с их параметрами. Причем, корень дерева реестра не стоит путать с корневыми разделами, так как это разные вещи. Диспетчером конфигурации (исполнительная система, реализующая реестр) определяются пути с полными именами файлов всех кустов на локальных компьютерах. Вспомогательные файлы для всех кустов за исключением HKEY_CURRENT_USER в операционных системах Windows находятся в папке %SystemRoot%\System32\Config. Во время загрузки операционной системы диспетчер конфигурации в разделе HKLM\SYSTEM\CurrentControlSet\Control\Hivelist определяет путь к каждому из существующих кусов и удаляет пути к кустам, выгруженным из памяти. Затем, для формирования привычной древовидной структуры системного реестра, диспетчер конфигурации создает корневые разделы реестра и связывает друг с другом существующие кусты. Как вы увидите немного ниже, кусты HKEY_LOCAL_MACHINE\HARDWARE и HKLM\SYSTEM\Clone (который вы сможете найти только в Windows 2000) являются изменяемыми и не имеют сопоставимых файлов, то есть такие кусты существуют временно и операционная система манипулирует ими только в памяти. Все кусты реестров с их местоположениями указаны в следующей таблице:
Путь к кусту в системном реестре | Путь к файлу самого куста |
HKEY_LOCAL_MACHINE\BCD00000000 | \Boot\BCD |
HKEY_LOCAL_MACHINE\COMPONENTS | %SystemRoot%\System32\Config\Components |
HKEY_LOCAL_MACHINE\SYSTEM | %SystemRoot%\System32\Config\System |
HKEY_LOCAL_MACHINE\SAM | %SystemRoot%\System32\Config\Sam |
HKEY_LOCAL_MACHINE\SECURITY | %SystemRoot%\System32\Config\Security |
HKEY_LOCAL_MACHINE\SOFTWARE | %SystemRoot%\System32\Config\Software |
HKEY_LOCAL_MACHINE\HARDWARE | Изменяемый куст (Volatile hive) |
HKEY_USERS\ | %SystemRoot%\ServiceProfiles\LocalService\Ntuser.dat |
HKEY_USERS\ | %SystemRoot%\ServiceProfiles\NetworkService\NtUser.dat |
HKEY_USERS\ | \Users\\Ntuser.dat |
HKEY_USERS\_Classes | \Users\\AppData\Local\Microsoft\Windows\Usrclass.dat |
HKEY_USERS\.DEFAULT | %SystemRoot%\System32\Config\Default |
Таблица 1. Файлы, соответствующие кустам реестра
Для того чтобы в самом начале загрузки операционной системы, пока еще нет поддержки виртуальной памяти библиотека системного ядра Ntldr.dll могла считывать все кусты (например, HKLM\SYSTEM) в физическую память, Windows ограничивает размеры кустов реестра. В отличие от операционных систем Windows XP и Windows Server 2003, где лимит на размер куста составлял 200 МБ или до четверти физической памяти, установленной в системе, начиная с операционных систем Windows Vista и Windows Server 2008 размер увеличен до 400 МБ или половины физической памяти, установленной в системе (в операционной системе Windows 2000 размер куста не мог превышать 12 МБ). В 64-разрядных операционных системах предельным размером куста является 1,5 ГБ. Общий размер загружаемых данных реестра ограничен в связи с тем, что для хранения кустов реестра операционная система использует пул подкачиваемой памяти, который определяется диспетчером памяти при инициализации на основании многих факторов. Причем, данные системного реестра не могут занимать более 80% этого пула.
В связи с установленными операционной системой лимитами на размер кустов реестра, количество одновременно входящих пользователей в операционную систему Windows при помощи служб терминалов может быть ограничено, так как каждый профиль пользователя увеличивает размер загруженных кустов. Для того чтобы избежать перерасхода виртуальной памяти для кустов реестра, в 32-разрядных версиях операционной системы Windows, диспетчер конфигурации использует не пул подкачиваемой памяти, а функции проецирования в системную память, предоставляемые диспетчером памяти, что позволяет проецироваться только тем частям кустов реестра, к которым происходят обращения только в данный момент. При помощи этого, ограничений на общий размер реестра нет, и общий размер загруженных кустов не сказывается на масштабируемости служб терминалов. В 64-разрядных системах в связи с тем, что виртуальное адресное пространство довольно велико, вместо пула подкачиваемой памяти используются дополнительные требования проецирования в системную память. Специфическим типом разделов является символьная ссылка, позволяющая диспетчеру конфигурации связывать кусты для организации реестра. Символьная ссылка – это раздел, который переадресует диспетчер конфигурации к другому разделу.
Если вкратце рассмотреть структуру кустов системного реестра, то кусты делятся диспетчером конфигурации на несколько логических единиц, размером по 4096 байт, которые называются блоками, кратно размеру которых, увеличивается и сам размер куста. Первый блок куста, который включает в себя глобальную информацию о самом кусте, а также сигнатуру, идентифицирующую файл как куст, порядковые номера, номер версии формата, внутреннее имя файла куста, метку времени последней записи в куст, а также контрольную сумму, называется базовым. Данные, содержащиеся в кусте реестра, упорядочиваются при помощи специальных контейнеров, которые называются ячейками. В этих ячейках могут храниться разделы, параметры, список подразделов, дескриптор защиты или список параметров раздела. При присоединении ячеек к кусту, сам куст увеличивается и для этого операционная система создает такой блок, который называется приемником, размер которого равен размеру самой ячейки. На следующей иллюстрации вы увидите схематическое изображение внутренней структуры куста реестра:
Увеличить рисунок
Рис.1. Структура куста реестра
Изменение данных реестра
На данный момент существует множество приложений (включая программное обеспечение сторонних разработчиков), которые предназначены для внесения изменений системного реестра. Для редактирования реестра программа должна использовать функции, с которыми, возможно, вы уже знакомы по утилите Process Monitor (такие функции как RegCreateKeyEx, RegQueryValueEx, RegSetValueEx и RegDeleteKeyEx). К основным средствам, предназначенным для редактирования реестра, относятся редактор реестра, групповые политики, файлы реестра, утилита командной строки REG, а также сценарии, написанные на языках сценариев VBScript или JScript, которые будут вкратце рассмотрены в следующих подразделах.
Редактор реестра
Утилита «Редактор реестра» (Regedit.exe) – это средство, которое, по меньшей мере, хотя бы один раз открывал каждый пользователь операционных систем Windows. Редактор реестра предназначен для просмотра и редактирования разделов и параметров реестра, поддерживает настройку параметров безопасности, позволяет восстанавливать реестр из резервной копии, а также сохранять и загружать файлы куста. Помимо этого, при помощи данного средства вы можете управлять системным реестром компьютеров, расположенных в вашей сети. Для того чтобы открыть данную утилиту, достаточно в диалоговом окне «Выполнить» ввести Regedit.exe. Редактор реестра имеет удобный пользовательский интерфейс, где слева, в области переходов, вы можете увидеть набор разделов реестра локального или удаленного компьютера, которые отображаются в виде папок, а справа, в области сведений вы можете найти параметры, которые входят в состав выбранного вами раздела. При просмотре системного реестра удаленного компьютера для вас будут доступны только два корневых раздела - HKEY_USERS и HKEY_LOCAL_MACHINE. Несмотря на то, что редактор реестра позволяет изменять большинство параметров, изменения стоит вносить очень осторожно, так как неправильное изменение параметров может привести к серьезным неисправностям. На следующей иллюстрации вы можете увидеть редактор реестра.
Увеличить рисунок
Рис. 2. Окно «Редактор реестра»
Групповые политики
Групповые политики – это компонент операционной системы, позволяющий управлять большинством конфигурационных параметров пользователей и компьютеров. Основана групповая политика на конкретных параметрах политики, которые обычно называются политиками, определяющими определенную настройку для применения. В большинстве случаев, этими политиками можно управлять непосредственно из оснастки «Редактор локальной групповой политики» на локальных компьютерах или компьютерах, расположенных в рабочей группе, а в доменной среде для управления конфигурацией групповых политик применяется оснастка «Управление групповой политикой». В данной оснастке, в узле «Административные шаблоны», политики конфигурации пользователя модифицируют значения параметров реестра в разделе HKEY_CURRENT_USER, а политики конфигурации компьютера – в разделе HKEY_LOCAL_MACHINE. Сам по себе, административный шаблон является текстовым файлом, указывающим на изменение конкретных параметров системного реестра, а также генерирующий пользовательский интерфейс для настройки параметра административных шаблонов непосредственно в оснастке редактора групповых политик. В большинстве случаев, административные шаблоны, предназначенные для конфигурации компьютера, модифицируют значения параметров в разделах HKLM\Software\Policies и HKLM\Software\Microsoft\Windows\CurrentVersion\Policies, а административные шаблоны конфигурации пользователя - HKCU\Software\Policies и HKCU\Software\Microsoft\Windows\CurrentVersion\Policies. При необходимости, помимо предустановленных административных шаблонов вы можете добавлять новые административные шаблоны, которые состоят из двух файлов - .admx и .adml.
Файлы реестра
Добавлять, изменять, а также удалять подразделы и значения параметров реестра вы можете не только при помощи утилиты «Редактор реестра». Редактор реестра использует REG-файлы, предназначенные для импорта и экспорта подразделов и значения параметров. Вы можете использовать такие файлы для распространения изменений параметров реестра на компьютеры, расположенные в локальной сети. В связи с тем, что после выполнения REG-файлов, их содержимое сливается с системным реестром локального компьютера, при создании таких файлов будьте внимательными, так как при неправильном использовании REG-файлов у вас могут возникнуть серьезные неполадки. При создании REG-файла необходимо соблюдать следующий синтаксис:
Версия_редактора_реестра
Пустая строка
[Путь_реестра1]
«Наименование_параметра1»=«Тип_данных1:Значение_данных1»
«Наименование_параметра2»=«Тип_данных2:Значение_данных2»
Пустая строка
[Путь_реестра2]
«Наименование_параметра3»=«Тип_данных3:Значение_данных3»
Рассмотрим каждую из составляющих REG-файла:
Версия_редактора_реестра – это заголовок данного файла, без которого параметры, указанные в REG-файле не будут импортироваться в системный реестр. В качестве такого заголовка должна быть указана строка с текстом Windows Registry Editor Version 5.00. иногда вместо данного заголовка вы можете встретить REGEDIT4, который является форматом устаревших версий Windows 98/NT 4.0
Пустая строка определяет начало нового раздела реестра, тем самым упрощая возможность анализировать содержимое, который в таких файлах называется путем реестра.
Путь_реестраХ представляет собой раздел или подраздел реестра, включающий первое импортируемое значение. При указании пути реестра, вы должны отделять каждый уровень косой чертой и заключать весь путь в квадратные скобки. В том случае, если последний уровень в реестре отсутствует – при импорте REG-файла будет создан такой подраздел.
Наименование_параметраХ является названием импортируемого параметра реестра. Название параметра всегда должно быть заключено в кавычки и перед указанием его значения должен быть указан знак равенства. В том случае, если параметр с таким именем существует, его значение будет изменено согласно тому, которое указано в REG-файле, а если такого параметра не существует, то он автоматически будет создан с указанным вами значением.
Тип_данныхХ определяет тип данных параметра реестра и всегда указывается после знака равенства. После типа данных перед значением данного параметра должно стоять двоеточие. Все типы данных были перечислены в одном из предыдущих разделов данной статьи.
Значение_данныхХ следует сразу после двоеточия и должно иметь формат, соответствующий модифицируемому типу данных параметра.
Помимо этих основных составляющих, для предоставления более удобного анализа REF-файла, вы можете добавлять комментарии. Все строки, начинающиеся с точки с запятой являются комментариями.
Пример REG-файла:
Windows Registry Editor Version 5.00
;Отключить удаленный доступ к реестру
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteRegistry]
"Start"=dword:00000004
Утилита командной строки REG
Утилита командной строки REG предназначена для просмотра разделов и параметров реестра, а также разнообразных манипуляций над ними. Данная утилита поддерживает определенный набор подкоманд, при помощи которых можно выводить список элементов раздела, сравнивать подразделы или их параметры, импортировать в реестр заданные кусты, сохранять копию указанных подразделов, а также выполнять множество различных действий. Для этой утилиты доступны следующие подкоманды:
- REG add. Эта подкоманда позволяет добавлять в системный реестр новый подраздел или параметр;
- REG query. При помощи этой подкоманды вы можете выводить список параметров раздела, а также названия вложенных подразделов;
- REG delete. Позволяет удалять из раздела определенный подраздел или параметр;
- REG copy. Используя эту подкоманду, вы можете копировать параметры раздела по указанному пути раздела на локальном или удаленном компьютере;
- REG compare. Данная подкоманда позволяет вам сравнивать подразделы или параметры реестра;
- REG restore. При помощи этой подкоманды вы можете записывать в реестр ранее сохраненные подразделы и параметры;
- REG flags. Эта подкоманда отображает и устанавливает флаги заданного раздела;
- REG save. Позволяет сохранять копию указанных подразделов и параметров системного реестра в файл;
- REG import. Используя эту подкоманду, вы можете импортировать в реестр заданный куст;
- REG export. При помощи этой подкоманды вы можете экспортировать заданные подразделы и параметры в файл;
- REG load. Эта подкоманда предназначена для загрузки указанного вами куста из файла в системный реестр;
- REG unload. Позволяет выгрузить заданный вами куст из реестра в файл.
Каждая подкоманда включает в себя определенные параметры, позволяющие выполнять конкретные действия. Например, параметр /s подкоманды REG add указывает символ, используемый в качестве разделителя данных для параметров типа REG_MULTI_SZ, а одноименный параметр подкоманды REG copy используется для копирования всех подразделов и параметров.
Для примера, добавим в контекстное меню ярлыка «Компьютер» команду «Программы и компоненты», просмотрим внесенные изменения, а затем удалим эту команду непосредственно из командной строки. Для этого необходимо выполнить следующие команды:
REG add HKLM\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\66 /ve /t REG_SZ /d "Программы и компоненты"
REG add HKLM\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\66\command /ve /t REG_SZ /d "control appwiz.cpl"
REG query HKLM\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\66\command /s /ve
REG delete HKLM\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\66\command
REG query HKLM\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\66\command
где в командах REG add параметр /ve указывает на то, что модифицироваться должен параметр с пустым именем (по умолчанию), параметр /t отвечает за используемый тип данных, а параметр /d определяет реальное значение, помещаемое в реестр. Параметр /s команды REG query позволяет вывести все вложенные подразделы, а при помощи параметра /ve можно увидеть значения параметров по умолчанию. Все вышеперечисленные действия можно увидеть на следующей иллюстрации:
Увеличить рисунок
Рис. 3. Выполнение простейших операций с реестром средствами командной строки