Во многих своих статьях я указываю твики реестра и говорю об изменении каких-либо параметров, которые тем или иным образом изменяют конфигурацию операционной системы Windows. Насколько известно большинству пользователей персональных компьютеров, реестр играет основную роль в конфигурировании и управлении операционных систем, и является неким хранилищем общесистемных и пользовательских параметров. Несмотря на то, что многие уверены в том, что все конфигурационные данные хранятся именно в виде данных на жестком диске, на самом деле параметры системного реестра расположены в памяти самого компьютера и поддерживаются исполнительной системой, а также ядром самой операционной системы. Об этом моменте, как и о многих других, вы узнаете из контекста данной статьи.
Использование системного реестра
Итак, реестром Windows является иерархическая база данных, которая хранит конфигурационную информацию операционной системы, приложений, а также информации о пользователях и оборудовании. Структура данных для удобности использования предоставлена в древовидном формате. Большую часть параметров, содержащихся в реестре вы можете отконфигурировать вручную при помощи пользовательского интерфейса (например, в разделе HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer вы можете выполнять настройки в меню «Пуск», что также можете сделать из диалогового окна «Настройка меню «Пуск»», вызываемого по нажатии на кнопку «Настроить» в свойствах панели задач и меню «Пуск»), однако, для изменения некоторых дополнительных параметров никакого графического пользовательского интерфейса (GUI) не предусмотрено (например, для настройки диалога переключения между окнами вы можете воспользоваться параметрами из раздела HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\AltTab). Для настройки таких параметров удобнее всего использовать ряд утилит, предназначенных для модификации реестра. Операционная система Windows предоставляет такие штатные средства для работы с реестром, как утилита «Редактор реестра» (Regedit.exe), которая имеет удобный для работы графический интерфейс, а также утилиты командной строки Reg. При помощи этих обеих утилит вы можете просматривать, добавлять, удалять, сравнивать, а также копировать, составлять и восстанавливать отдельные копии элементов реестра. При работе с каждой из этих утилит стоит быть внимательными и осторожными, так как некорректное изменение параметров реестра чревато серьезными последствиями, из-за которых может даже понадобиться переустанавливать операционную систему.
Считываться конфигурационная информация системного реестра может в различные моменты работы операционной системы, начиная с модификации какого-либо конкретного параметра или раздела и заканчивая мониторингом конфигурационных параметров специфического программного обеспечения. Но всегда конфигурационные данные системного реестра считываются в следующих случаях:
- Во время загрузки операционной системы считываются некоторые параметры, которые определяют, какие драйвера для различных устройств необходимо загрузить;
- Во время загрузки ядра операционной системы, также используются некоторые параметры, которые позволяют настраивать поведение операционной системы, такие как диспетчер памяти, диспетчер процессов и пр.;
- При загрузке графической подсистемы и компонентов Windows, таких как Проводник Windows, Панель Управления и пр., из системного реестра считываются конфигурационные настройки и предпочтения текущего пользователя. К этой категории можно отнести расположение ярлыков на рабочем столе, цветовые схемы, различные надстройки и панели управления веб-браузера Internet Explorer и другие;
- Во время запуска любого приложения из реестра считываются общесистемные параметры, включая информацию о лицензировании, настройки для данного пользователя и прочее.
Помимо считывания данных о разделах и параметрах системного реестра, его данные также могут модифицироваться. Далее предоставлен список наиболее часто повторяющихся ситуаций, связанных с модификацией параметров и разделов реестра:
- Прежде всего, вся структура системного реестра, а также настройки, установленные по умолчанию, определяются версией, поставляемой на дистрибутиве операционной системы, которая копируется при установке новой системы;
- Разделы и параметры в реестре создаются при установке драйвера Plug and Play, которые определяют работу самого драйвера, а также в каком случае следует запускать драйвер для устройства;
- Во время установки всевозможных приложений, для их настроек по умолчанию создаются новые разделы с параметрами;
- Во время изменения параметров приложений или свойств самой операционной системы посредствам пользовательского интерфейса изменяются определённые параметры реестра.
Структура реестра
Все вышеперечисленные конфигурационные параметры содержатся в разделах реестра, которые размещены в корневом разделе, контролирующем, как и когда будут использоваться вложенные разделы и параметры. В каждом разделе могут быть созданы записи, называемые параметрами. Раздел может содержать любое количество параметров, значения которых могут быть предоставлены в любой возможной форме. Каждый раздел имеет свое уникальное имя, состоящее из одного или нескольких символов, не чувствительных к регистру. Все имена корневых разделов представляют Windows-описатели (Handlers) разделов (HEY), в связи с этим и было создано название ключевых разделов HKEY (HK). В следующей таблице вы можете увидеть названия разделов, их аббревиатур, а также краткое описание:
Имя корневого раздела | Аббревиатура | Описание |
HKEY_USERS | HKU | В текущем разделе содержатся подразделы, в которых хранится информация обо всех учетных записях на текущем компьютере |
HKEY_CURRENT_USER | HKCU | Данный раздел содержит данные, которые ссылаются на профиль пользователя, который вошел в систему на данный момент |
HKEY_LOCAL_MACHINE | HKLM | Этот раздел содержит конфигурационные параметры системного уровня |
HKEY_CLASSES_ROOT | HKCR | В текущем разделе расположены конфигурационные параметры для приложений и файлов, а также хранится регистрационная информация COM-объектов |
HKEY_CURRENT_CONFIG | HKCC | В данный раздел включены информационные сведения об используемом профиле оборудования |
HKEY_PERFORMANCE_DATA | HKPD | Этот раздел хранит некоторые сведения о производительности системы |
Таблица 1. Описание корневых разделов системного реестра Windows
В следующих подразделах вы найдете более подробную информацию о каждом корневом разделе реестра.
HKEY_USERS
В корневом разделе HKEY_USERS (HKU) системного реестра вы можете найти подразделы для каждого пользовательского профиля, а также регистрационную базу данных классов и подраздел HKU\.DEFAULT, который связан с профилем, предназначенным для процессов, выполняемых под локальной системной учетной записью. Помимо этого, данный профиль используется службой Winlogon, скажем, для изменения параметров фона рабочего стола на экране входа в систему. Также, много системных служб запускается от имени учетной записи Local System, где применяется профиль по умолчанию. Для этого раздела недоступна информация, которая хранится в профиле пользователей, сопоставленных с другими учетными записями. Информация по каждому профилю операционной системы помещается в подраздел, имя которого соответствует идентификатору (SID) учетной записи. Сами конфигурационные данные, которые находятся в таких подразделах, включают в себя время последней загрузки данного профиля, двоичное представление этого идентификатора, а также путь к кусту профиля на жестком диске.
Еще некоторые службы используют учетную запись, которой необходимо аутентифицироваться на других компьютерах, расположенных в локальной сети, но не требуется членство в административных группах или привилегий, которые назначаются учетной записью Local System. Такая учетная запись называется Network Service и процессы, выполняемые под этой учетной записью, используют ее профиль, который расположен в разделе HKU\S-1-5-20 и его файлы расположены в папке %SystemRoot%\ServiceProfiles\NetworkService.
Еще есть учетная запись Local Service, которая по своим особенностям очень похожа на Network Service, но к основному ее отличию можно отнести то, что эта учетная запись обращается только лишь к тем сетевым ресурсам, которые разрешают анонимный доступ. Такой профиль загружается в разделе HKU\S-1-5-19 и физически хранится в папке %SystemRoot%\ServiceProfiles\LocalService.
HKEY_CURRENT_USER
В корневом разделе HKEY_CURRENT_USER (HKCU) вы найдете конфигурационные параметры программного обеспечения и пользовательские данные, зарегистрированные для текущего локального пользователя. Всегда подразделы HKCU и их параметры будут ссылаться только на профиль текущего пользователя, который на жестком диске можно найти в файле c:\Users\%username%\Ntuser.dat. И каждый раз, при загрузке профиля пользователя, на подраздел в HKEY_USERS создается ссылка, соответствующая текущему вошедшему в систему пользователю. Во вложенных подразделах этого корневого раздела системного реестра вы можете настраивать:
- Сопоставления звуковых сигналов, согласно различным событиям (подраздел AppEvent);
- Параметры внешнего вида окна командной строки (подраздел Console);
- Конфигурационные параметры для настроек панели управления текущего пользователя (подраздел Control Panel, в котором вы можете настроить дополнительные параметры существующих экранных заставок, оформление вашего рабочего стола, настройки специальных возможностей, компонента «Часы, язык и регион», а также параметры клавиатуры и мыши);
- Указать пути переменных окружений для текущего пользователя (подраздел Environment);
- Информация о знаках EUDC для конечного пользователя (подраздел EUDC);
- Конфигурационные параметры для учетной записи Windows Mail (подраздел Identities);
- Изменить параметры раскладки клавиатуры (подраздел Keyboard Layout);
- Указывать имена и всевозможные параметры подключенных к этому текущему пользователю сетевых дисков (подраздел Network);
- Изменять параметры подключенных принтеров (подраздел Printers);
- Управлять настройками удаленного использования данного компьютера (подраздел RemoteAccess);
- Устанавливать всевозможные настройки для штатного программного обеспечения, а также приложений, разработанных третьими сторонами (подраздел Software);
- Изменять некоторые системные параметры (подраздел System);
- Указывать переменные окружения, отвечающие за имя пользователя, расположение папки AppData и прочее (подраздел Volatile Environment);
- Настраивать группы главного меню, которые являются специфическими для каждого пользователя.
HKEY_LOCAL_MACHINE
Корневой раздел HKEY_LOCAL_MACHINE (HKLM) содержит свои подразделы с параметрами конфигурации, относящиеся к общесистемной конфигурации текущего компьютера, то есть конфигурационных данных, которые не настраиваются для всех пользователей. Стоит обратить внимание на то, что системный реестр 64-разрядных версий операционных систем Windows состоит из 32- и 64-битных разделов реестра, где у большинства 32-разрядных разделов реестра названия разделов идентичны тем, которые указаны в 64-разрядном разделе, и наоборот. По умолчанию, 64-разрядная версия редактора реестра (утилита Regedit.exe), которая входит в состав 64-разрядных операционных систем Windows отображает как 64, так и 32-разрядные разделы. В 64-разрядной версии утилиты «Редактор реестра», 32-разрядные разделы расположены здесь: HKEY_LOCAL_MACHINE\Software\WOW6432Node. Раздел HKLM содержит следующие основные подразделы:
BCD. Данный подраздел содержит информацию о конфигурационной базе данных загрузки (Boot Configuration Database BCD). Эта база данных заменяет файл Boot.ini, который использовался в операционных системах, вышедших до Windows Vista, и предоставляет больше возможностей для конфигурации данных о загрузке ОС. Каждая запись в текущем подразделе, которая была сделана во время установки операционной системы или во время изменения параметров загрузка средствами командной строки, хранится в дочернем подразделе Objects или в качестве самого объекта, на который ссылается загрузочная запись в виде GUID, или в подразделах с названиями в виде цифр. Значения, связанные с каждым параметром подразделов соответствуют параметрам утилиты bcdedit.exe командной строки.
COMPONENTS. В текущем подразделе содержится информация, которая относится к компоненту на основании обслуживания стека (Component Based Servicing CBS). Данный стек включает в себя всевозможные файлы и ресурсы, которые являются частью образа установщика Windows. Параметры CBS API, которые расположены в данном разделе, предназначены для определения установленных компонентов и их конфигурации. Используется же вся эта информация каждый раз, когда компоненты устанавливаются, обновляются или удаляются в индивидуальном, либо в пакетном режимах.
HARDWARE. Этот подраздел включает в себя описание аппаратного обеспечения для локальной системы, а также все сопоставления драйверов с физическими устройствами. Здесь вы можете найти конфигурационные параметры для всех устройств, которые присутствуют в «Диспетчере устройств». В разделе HARDWARE можно отметить четыре основных подраздела. Подраздел ACPI содержит информацию о конкретных возможностях ACPI на этом компьютере. Подраздел Descriptions содержит описания центральных процессоров, процессоров для операций с плавающей точкой, а также многофункциональных устройств компьютера. Подраздел DeviceMap сопоставляет устройства драйверам. В подразделе ResourceMap имеются три основных подраздела. Первый предназначен для уровня аппаратных абстракций, таких как HAL, применяемый при отслеживании найденных устройств. Второй - для Plug-and-Play Manager, то есть для записи устройств, про которые известно. А третий - для отображения объема оперативной памяти. В зависимости от аппаратной конфигурации данный раздел может содержать дополнительные подразделы.
SAM. Подраздел SAM (Security Accounts Manager) раздела HKLM включает в себя такую информацию о локальных пользователях и группах, как сопоставления с доменом Active Directory, определения групп, а также пароли. Несмотря на то, что на контроллерах домена Active Directory в базе данных хранятся общедоступные параметры и сведения о пользователях, компьютерах и доменных группах, SAM-файл является базой учетных записей пользователей, содержащей сведения об уровнях пользовательских привилегий, паролей и т.п., дескриптор защиты которой сконфигурирован так, что к нему не имеет доступ даже администратор. Поэтому по умолчанию вся ветвь подраздела SAM закрыта от просмотра. Вспомогательными файлами для данного раздела являются файлы Sam, Sam.log и Sam.sav.
SECURITY. С данным подразделом связаны данные, которые имеют отношение к общесистемным политикам безопасности. Помимо этого, подразделы SAM и SECURITY связаны специально для хранения информации о правах, назначенных пользователям в подразделе HKLM\SECURITY\SAM. Просмотр данного раздела многого не даст (по умолчанию дескриптор защиты установлен так, что доступ к этому разделу есть только у учетной записи System), так как данные, которые в нем содержаться, не документированы, а все пароли тщательно зашифрованы. Вспомогательными файлами для данного раздела являются файлы Security, Security.log и Security.sav.
SOFTWARE. Текущий подраздел можно назвать в какой-то степени корнем всей структуры подразделов HKLM, так как это именно то место, где операционная система Windows хранит общесистемную конфигурационную информацию приложений и компонентов, которые не принимают участие в загрузке самой системы. Кроме того, при установке программного обеспечения именно в этом разделе создаются подразделы, предназначенные для сохранения своих общесистемных настроек. Большая часть данных о настройках пользовательского интерфейса хранится в подразделе HKLM\Software\Microsoft\Windows\CurrentVersion. Здесь также вы можете с легкостью найти подразделы, предназначенные для восстановления системы, шифрующей файловой системы, службы терминалов и многое другое. Вспомогательными файлами для данного раздела являются файлы Software, Software.log и Software.sav.
SYSTEM. В этом, последнем, разделе HKLM находится общесистемная конфигурационная информация, которая выполняется в последнюю очередь после завершения загрузки операционной системы. К таким данным можно отнести управляющие настройки, список драйверов и запускаемых служб, которые применяются при последней удачной загрузке, также называемой последней конфигурацией, так как для запуска операционной системы она критична и Windows всегда делает ее копию. Одним из основных подразделов HKLM\SYSTEM является подраздел CurrentControlSet, который указывает на набор управляющих настроек, используемых на данный момент операционной системой. Вспомогательными файлами для данного раздела являются файлы System, System.alt, System.log и System.sav.
HKEY_CLASSES_ROOT
Этот корневой раздел, в какой-то степени, можно назвать подразделом HKEY_LOCAL_MACHINE\Software\Classes, содержащий параметры по умолчанию, которые относятся ко всем пользователям локального компьютера. Он включает в себя сопоставления расширений файлов, а также идентифицирующие данные COM-классов. Здесь для каждого зарегистрированного типа файлов, в соответствующих подразделах, указаны сведения, обеспечивающие выполнение необходимой программы при открытии файла. В свою очередь, в подразделе HKEY_CURRENT_USER\Software\Classes, параметры определяют регистрационные данные классов расширений файлов, которые относятся только к текущему пользователю и физически расположены в файле c:\Users\%имя_пользователя%\AppData\Local\Microsoft\Windows\ UsrClass.dat. Данные этого источника также включены в раздел HKCR, но данные, которые были добавлены или изменены непосредственно из этого раздела будут сохранены операционной системой в разделе HKEY_LOCAL_MACHINE\Software\Classes. Стоит также обратить внимание на то, что для каждого пользователя локального компьютера такие данные являются специфическими, что не позволяет непривилегированному пользователю изменять или удалять разделы в HKCR, а также указывать специфические настройки для определенных типов файлов конкретным пользователям.
HKEY_CURRENT_CONFIG
Если корневой раздел HKEY_CLASSES_ROOT можно назвать ссылкой на разделы HKEY_LOCAL_MACHINE\Software\Classes и HKEY_CURRENT_USER\Software\Classes, то данный раздел является обыкновенной ссылкой на текущий профиль оборудования, расположенный в разделе HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profile\Current. Именно при помощи этого раздела реестра вы можете управлять возможными настройками системных драйверов для существующих аппаратных устройств. Несмотря на то, что можно указать профиль, который будет активен при следующей загрузке операционной системы, настройки HKCC будут всегда применяться для активного профиля.
HKEY_PERFORMANCE_DATA
Известно, что при обнаружении возможных проблем с аппаратной конфигурацией и всей производительностью системы в целом, рекомендуется использовать оснастку «Системный монитор» с соответствующими счетчиками производительности. В операционных системах Windows системный реестр также относится к механизму, обеспечивающему доступ ко всем значениям счетчиков производительности, используемых для мониторинга системы. Основным преимуществом в использовании счетчиков производительности средствами реестра является возможность мониторинга удаленных компьютеров без особых затрат, так как API-функции реестра позволяют получить быстрый доступ к удаленному реестру. В связи с тем, что в данном разделе хранятся не конфигурационные параметры, а только ссылки на соответствующие источники данных счетчиков производительности, доступ к разделу HKPD средствами утилиты «Редактор реестра» запрещен. Информацию из данного раздела реестра вы можете получить при помощи функции PDH (Performance Data Helper), которая предоставляется библиотекой Pdh.dll (Performance Data Helper API), компоненты которой вы можете увидеть на следующей иллюстрации:
Увеличить рисунок
Рис. 1. Архитектура доступа к счетчикам производительности
Значение параметров реестра Windows
Как вы уже поняли, разделы системного реестра можно назвать контейнерами, которые содержат конфигурационную информацию. Информация такого рода содержится в параметрах, которые вполне можно сравнить с файлами, расположенными в папках на диске, откуда, собственно, и заимствовано соглашение об их именовании. Соответственно, вы можете дать одинаковые названия множеству параметров, но только в том случае, если эти параметры расположены в разных разделах или подразделах. Каждый параметр реестра состоит из таких составляющих, как имя параметра, тип данных, а также самого значения. С соблюдением правильных типов данных добавляемых вами параметров нужно быть крайне внимательными и осторожными. Используйте именно тот тип данных, который указан в источнике самого твика, так как в противном случае последствия могут быть весьма существенными. Начиная с версии операционной системы Windows XP, максимальная длина имени параметра не должна превышать 16383 символов. В общей сложности насчитывается 15 типов данных, но в большинстве случаев используются только параметры типа REG_DWORD, REG_BINARY, а также REG_SZ. Все типы данных параметров реестра описаны в следующей таблице:
Название типа данных | Тип параметра | Описание |
Двоичный параметр | REG_BINARY | Содержит необработанные двоичные данные произвольной длины. В виде таких двоичных данных хранится большинство сведений об аппаратных компонентах. Эти данные вы можете просматривать в двоичном или шестнадцатеричном виде при помощи редактора реестра. |
Параметр DWORD | REG_DWORD | Включает в себя параметры, которые представлены в виде значения, длина которого составляет 4 байта, то есть 32-разрядное целое. Используется такой тип данных для хранения параметров драйверов устройств, служб, а также системных настроек, причем, в редакторе реестра его значение можно просматривать в двоичном, шестнадцатеричном или десятичном формате. |
Параметр DWORD | REG_DWORD_BIG_ENDIAN | То же относится к параметру DWORD, где значение представляет собой 32-разрядное целое, но здесь первым является старший байт; эквивалентно REG_DWORD |
Параметр DWORD | REG_DWORD_LITTLE_ENDIAN | Данный тип тоже относится к параметру DWORD, где значение представляет собой 32-разрядное целое, но здесь первым является младший байт; эквивалентно REG_DWORD |
Двоичный параметр | REG_EXPAND_SZ | Представляет собой Unicode-строку данных переменной длины, которая может включать переменные окружения. Эти переменные при использовании данных обрабатываются конкретной программой или службой. |
Параметр DWORD | REG_FULL_RESOURCE_DESCRIPTOR | Также как и REG_RESOURCE_LIST является последовательностью вложенных массивов, используемых только физическими устройствами, которые расположены в разделе \HardwareDescription. |
Ссылка | REG_LINK | Символическая ссылка в кодировке Unicode, которая позволяет разделу ссылаться на другой раздел или параметр. Ссылки используют три из шести корневых раздела реестра, которые не записываются на диск, а создаются динамически при каждой загрузке операционной системы |
Многострочный параметр | REG_MULTI_SZ | Массив многострочного текста в Unicode кодировке, содержащий списки или другие записи, которые удобны для чтения и могут разделяться запятыми, пробелами и другими символами. В этом типе данных может храниться список IP-адресов, а также другая информация. |
Отсутствует | REG_NONE | Данные этого параметра являются нетипизированными, т.е. они не имеют определенного типа. Обычно данные такого типа записываются самой операционной системой или приложениями и в редакторе реестра они отображаются в виде двоичного параметра в шестнадцатеричном формате. |
Параметр QWORD | REG_QWORD | Данные этого типа представляются в виде 64-разрядного целого. Параметры с этим типом данных в оснастке «Редактор реестра» отображаются в виде двоичного параметра. |
Параметр QWORD | REG_QWORD_BIG_ENDIAN | То же относится к параметру REG_QWORD и подобно REG_DWORD_BIG_ENDIAN, значение представляет собой 64-разрядное целое, но здесь первым является старший байт; эквивалентно REG_QWORD |
Параметр QWORD | REG_QWORD_LITTLE_ENDIAN | Подобно параметру REG_DWORD_LITTLE_ENDIAN, где значение представляет собой 64-разрядное целое, но здесь первым является старший байт; эквивалентно REG_QWORD |
Двоичный параметр | REG_RESOURCE_LIST | Включает последовательность вложенных массивов, предназначенных для хранения описания аппаратного ресурса, используемого драйверами или управляемыми ими физическими устройствами. Данные такого типа операционная система держит в разделе \ResourceMap, которые отображаются в виде двоичного параметра в шестнадцатеричном формате. |
Двоичный параметр | REG_RESOURCE_REQUIREMENTS_LIST | Как и типы данных REG_RESOURCE_LIST и REG_FULL_RESOURCE_DESCRIPTOR включает в себя последовательность вложенных массивов, но, в отличие от вышеперечисленных типов данных, служит для хранения списка драйверов аппаратных ресурсов, которые могут быть использованы определенным драйвером устройства или управляемым им физическим устройством. Большую часть из этого списка операционная система записывает в раздел \ResourceMap. |
Строковый параметр | REG_SZ | Значением такого параметра выступает текстовая строка в кодировке Unicode фиксированной длины |
Таблица 2. Типы данных параметров реестра
Также стоит отметить то, что для повышения эффективности использования системного реестра, в реестр заносится имя внешнего файла, где хранятся значения, превышающие размер в 2048 байт. Общий размер всех параметров раздела не должен превышать 64 КВ.
Продолжение следует.