В систему Windows, начиная с Windows 95, включается единое хранилище, которое
называется реестром (registry) и используется для хранения информации об этой
операционной системе и установленных приложениях. Реестр является базой данных,
и он используется почти во всем, что вы делаете. Он содержит информацию о
самом компьютере, его оборудовании, периферийных устройствах, подсоединенных
к компьютеру, об установленном ПО, а также о пользователях, выполняющих
вход на этот компьютер.
Приложения используют реестр все время, используя стандартные интерфейсы
прикладных программ WIN32 API для доступа к необходимым данным. Программы
установки ПО используют стандартные API для добавления, изменения или удаления
данных реестра. Реально реестр принадлежит программному обеспечению
(включая операционную систему) и предназначен для того, чтобы предоставлять
информацию для ПО, а не для пользователей.
Большинство данных реестра, которые записываются в результате действий
пользователей, помещаются туда из диалоговых окон, в которых работает пользователь
(например, из апплетов Панели управления [Control Panel]), или из групповых
политик. Предполагается, что вы вносите изменения в элементы конфигурации
в окнах графического интерфейса и в диалоговых окнах.
Однако в реальных условиях многие из нас считают, что непосредственная работа
в реестре выполняется быстрее и проще, чем прохождение через последовательность
диалоговых окон. Кроме того, некоторые проблемы могут быть разрешены
только путем непосредственных изменений в реестре.
Обзор реестра
Реестр пополнялся из целого ряда управляющих файлов и баз данных, которые имелись
в предыдущих версиях Windows, что логически привело к современной реализации
этого хранилища настроек Windows Server 2003.
В системе Microsoft Windows 3.1, которая была первой широко используемой
версией Windows (особенно в бизнесе) использовались три типа файлов, определяющих
оборудование компьютера и приложения для этой операционной системы.
Два типа файлов использовались для инициализации и имели расширение имени
.ini, и третий тип файлов использовался как база данных для регистрации. Среди
файлов инициализации (.ini-файлов) имелись файлы, включенные в Windows, а также
множество частных .ini-файлов из приложений (прикладного ПО).
В Windows 3.1 использовались шесть .ini-файлов для загрузки и управления средой
Windows (control.ini, progman.ini, protocol.ini, system.ini, win.ini и winfile.ini).
Файл win.ini был основным местом хранения информации, относящейся к конфигурации
ПО этой операционной системы, а также специальной информации для
всей системы, добавляемой приложениями. Поскольку каждое приложение вносило
изменения в файл win.ini (не принимая во внимание все остальные приложения),
этот файл разрастался очень быстро. Это вызывало проблемы, когда размер
файла превышал 64 Кб. В операционной системе разрешался рост этого файла сверх
64 Кб (без уведомления пользователя, что превышен этот предел), хотя любая запись,
выходящая за границу 64 Кб, игнорировалась. Если приложения добавляли
записи в верхние разделы файла win.ini, то информация внизу файла выталкивалась
за границу инициализации, и эта информация не реализовалась. Приложения,
которым требовались эти потерянные записи инициализации, переставали работать
полностью или утрачивали определенные функции. Пытаясь воспрепятствовать
этой проблеме, Microsoft рекомендовала разработчикам приложений сохранять
информацию приложений в частных .ini-файлах, которые бы относились только к
их приложению. Хотя это помогло, большинство разработчиков приложений продолжали
размещать большое количество информации в файле win.ini.
Файл system.ini использовался как основное хранилище системной информации
об оборудовании, установленном на компьютере, чтобы указывать операционной
системе на оборудование и связанные с ним программные компоненты (драйверы
устройств, оболочки и т.д.).
Файл progman.ini содержал настройки инициализации для Windows Program
Manager, и файл winfile.ini содержал настройки инициализации для Windows File
Manager. Отсутствие этих файлов не препятствовало работе Windows (в отличие от
файлов system.ini и win.ini), но загружалась конфигурация по умолчанию для приложений,
которыми они управляли, без каких-либо настроек, внесенных пользователем.
Файл protocol.ini, который впервые появился для версии Windows for Workgroups
в Windows 3.1x, содержал информацию инициализации для сетевой работы в Windows.
Частные файлы инициализации были .ini-файлами, которые добавлялись в каталог
Windows приложениями от сторонних фирм, которые устанавливались на компьютере.
Эти файлы содержали конкретную информацию о состоянии приложения,
включая такие элементы, как положение на экране, список недавно
использовавшихся файлов и т.д.
Файл win.ini до сих пор существует в большинстве систем Windows NT/ 2000/
Server 2003, и его роль состоит в поддержке 16-битных приложений.
И последним файлом, который использовался системой Windows 3.1x для конфигурации
системы, был файл reg.dat. Это была база данных регистрации Windows
3.1 Registration Database, которая являлась непосредственным предшественником
реестра. (Прошло не слишком много времени, и пользователи сократили Registration
Database до registry.) Эта база данных с вложенными структурами, начиная от единственного
корня ( HKEY_CLASSES_ROOT ), содержала информацию, связанную с
расширениями имен файлов, а также поддержку OLE (Object Linking and Embedding)
для функции drag-and-drop. В отличие от .ini-файлов, которые являлись простыми
текстовыми файлами ASCII, и которые можно было редактировать в любом текстовом
редакторе, файл reg.dat был двоичным файлом и поставлялся со своей собственной
программой редактирования, Registration Information Editor (Regedit.exe). Этот
первый реестр имел некоторые серьезные ограничения в виде единственной иерархической
структуры и предельного размера в 64 Кб файла reg.dat.
Большой проблемой реестра Windows 3.1 было то, как он использовался или,
скорее, не использовался этой операционной системой. Не было особого смысла в
аккуратной поддержке этой базы данных регистрации на уровне текущих изменений.
Приложения могли вносить в него записи, а могли и не вносить. В операционную
систему не было встроено никаких стандартов, чтобы приложения записывали
в реестр те же данные, что и в собственные .ini-файлы или в системные .ini-файлы.
Если конфигурация программного обеспечения, .ini-файлы и база данных регистрации
имели одинаковую информацию, это часто бывало просто совпадением. Кроме
того, методы связи, использовавшиеся для запроса и записи в реестр, были сложны
и требовали больших дополнительных затрат ресурсов, что часто замедляло работу
компьютера. И, наконец, настроек отдельного пользователя не существовало, поэтому
пользователи одного компьютера получали настройки, оставленные последним
работавшим пользователем.
Когда Microsoft выпустила первый вариант Windows NT (NT 3.1), реестр стал
намного более гибким и мощным. Ограничение в 64 Кб было снято. Иерархическая
структура была расширена, включив несколько контейнеров с вложенными уровнями,
а код управления реестром был переработан, чтобы поддерживать достаточно
высокую производительность. Было реализовано дистанционное администрирование,
что упростило жизнь сетевого администратора. Microsoft заставила
разработчиков использовать реестр для переменных и значений и даже ее собственные
программы стали поддерживать реестр.
На самом деле .ini-файлы продолжают играть определенную роль в самых новых
версиях Windows. Запустите поиск .ini-файлов на вашем компьютере Windows Server
2003, и вы найдете очень много таких .ini-файлов. После задания ролей компьютера,
но перед установкой каких-либо приложений поиск .ini-файлов на моем компьютере
Windows Server 2003 дал 228 .ini-файлов.Правила Microsoft для разработчиков включают указание, что любая программа
должна записывать свои установочные настройки в раздел HKEY_LOCAL_MACHINE\Software\Имя_поставщика и все пользовательские настройки
в HKEY_CURRENT_USER\Software\Имя_поставщика. Слишком многие
компании, разрабатывающие ПО, игнорируют это правило или не выполняют его
должным образом. Некоторые приложения создают подразделы, но не заполняют
их данными. Некоторые приложения пишут данные реестра, которые очевидным
образом нарушают это правило, например, регистрируя информацию командной
строки, которая указывает на .ini-файл вместо исполняемого файла программы.
Еще одним существенным изменением в выпуске Windows NT 3.1 было появление
Regedt32. Этот новый 32-битный редактор реестра выводил каждое поддерево в
его собственном окне и содержал новые мощные команды, позволяющие, например,
подсоединяться к реестру на удаленном компьютере, а также защищать разделы
реестра.
Windows NT 4 и Windows 95 (а позже Windows 98) были выпущены с почти одинаковыми
реестрами. В обоих случаях были добавлены два новых поддерева: HKEY_CURRENT_CONFIG и HKEY_DYN_DATA.
Все эти изменения привели нас к реестру Windows Server 2003 (а также Windows
2000), который является темой этой лекции.
Структура реестра
Реестр – это иерархическая база данных, содержащая вложенные контейнеры и данные
следующего типа.
Поддеревья (Subtree). Корни, или основные группы этой иерархии.
Разделы (Key). Основные контейнеры, находящиеся непосредственно в поддеревьях.
Подразделы (Subkey). Дочерние подразделы. Подразделы могут содержать вложенные подразделы или записи.
Записи (Entry). Реальные данные (значения), которые влияют на систему. Записи представлены в правой панели редактора реестра.
Примечание. Обозначение HKEY происходит от HandleToKey (указатель к разделу).
Ульи и файлы ульев
Физически реестр – это набор файлов, которые называются ульями. Улей (hive) –
это определенная часть реестра (определенный набор разделов, подразделов и параметров),
которая представлена файлом на вашем компьютере. Файлы ульев можно
просматривать или редактировать только с помощью редактора реестра. Однако
их можно копировать, что является способом их резервного копирования вручную.
(Большинство программ резервного копирования, включая соответствующую встроенную
программу в Windows Server 2003, позволяют выполнять резервное копирование
реестра.)
Файлы ульев реестра сохраняются в виде .dat-файлов, и для каждого из этих
файлов имеется соответствующий .log-файл, который действует как журнал транзакций
для основного .dat-файла. Добавление .log-файла к .dat-файлу используется
как средство отказоустойчивости. В случае изменений, когда требуется обновить
файл определенного улья, эти изменения сначала вносятся в .log-файл, который
действует как файл транзакций. (Если вы знакомы с Microsoft Exchange Server или
общим подходом к использованию базы данных/файла транзакций Jet, то здесь используется
тот же принцип.)
При обновлении .log-файла транзакции записываются на диск, и затем происходит
обновление файла улья с диска. Запись на диск является принудительной; это
не тот случай, когда "изменения помещаются в кэш, а их запись происходит, когда
на это есть время". При отказе компьютера до обновления файла улья можно выполнить
"откат" транзакций .log-файла, чтобы вернуться к предыдущим настройкам.
В самом реестре ведется запись для файлов ульев в списке HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Hive. Просматривая
этот список, вы увидите пару интересных элементов.
Во-первых, здесь имеется запись для раздела Hardware, но в панели данных нет
ни одного файла улья. Дело в том, что раздел Hardware формируется целиком во
время загрузки. Файл ntdetect.com собирает информацию, необходимую для заполнения
этого раздела, и операционная система не считывает эту информацию из какого-либо
файла улья.
Второй интересный момент – это путь к файлу: \Device\HarddiskVolume1\Windows\System32\Config\<имя_файла>
(вместо файлов настроек выполнившего
вход пользователя, которые находятся в подпапках \Device\HarddiskVolume1\Documents and Settings). Если вы не используете Windows как "цель" для своей установки
Windows Server 2003, то происходит подстановка использованного вами имени
папки (на протяжении всего этого курса я использую для обозначения этой папки %SystemRoot% ). Этот формат позволяет понять, в какой момент Windows выполняет
доступ к этой информации во время загрузки операционной системы. Операционная
система не может читать или назначать буквы-обозначения дисков, пока не
войдет в процесс запуска, то есть это единственный способ, посредством которого
Windows может найти соответствующее местоположение.
В таблице 4.1 показано местоположение файлов ульев (а также их содержимое)
на вашем компьютере Windows Server 2003.
Местоположение и содержимое файлов ульев на компьютере Windows Server 2003
| Улей реестра |
Файл на диске |
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\System |
%SystemRoot%\System32\Config\System |
HKEY_CURRENT_CONFIG |
%SystemRoot%\System32\Config\System |
HKEY_CURRENT_USER |
%SystemDrive%\Documents and Settings\< имя_пользователя >\Ntuser.dat |
HKEY_USERS\.Default |
%SystemDrive%\Documents and Settings\Default User\Ntuser.dat |
Элементы данных реестра
Элементы данных реестра находятся на нижнем уровне иерархии реестра. Они содержат
данные, которые определяют поведение разделов и подразделов (хотя не все
разделы и подразделы содержат записи данных). Записи представлены в правой
панели редактора реестра.
Любая запись содержит три элемента.
Имя (параметр).
Тип данных.
Значение данных.
Имя записи
Имя записи это почти всегда (но не всегда) одно слово, даже если фактически это
составное имя. Например, AutoRepeatRate – это имя записи в подразделе Keyboard
Response. Во время редактирования реестра вы можете добавлять новые записи и
присваивать им имя, однако это имя не должно быть произвольным. Имена должны
быть известны операционной системе или приложению, которое использует данную
запись, и вы должны знать это имя, прежде чем добавлять запись.
Типы данных записи
Каждая запись имеет тип данных, которые может хранить эта запись. Существуют
десять типов данных, но некоторые из них не используются системой Windows Server
2003. В следующих разделах описываются типы данных, которые могут вам встретиться.
REG_DWORD. Это двойное слово – два 16-битных слова, образующих 32-битное значение.
Это наиболее распространенный тип данных в реестре, и он используется
для разнообразных записей. Вы можете встретить записи с информацией о драйвере
устройства, булевыми значениями, такие величины, как количество секунд, которое
должно пройти, прежде чем что-то произойдет или не произойдет, и другую
информацию.
В редакторе Regedit записи типа REG_DWORD выводятся в шестнадцатеричном
формате, но вы можете переходить в десятичный или двоичный формат (в зависимости
от вида записи), если хотите выполнить редактирование. Я не могу выполнять
в уме преобразование шестнадцатеричных значений в другие системы
счисления, поэтому при необходимости изменения какой-либо величины, например,
периода тайм-аута, я должен изменить формат представления, чтобы выполнить
свою задачу. Если вы можете выполнять такие преобразования в уме, то сможете
работать быстрее.
REG_BINARY. Этот тип данных используется в записях с необработанными двоичными
данными. "Необработанные" означает, что нет никаких терминаторов, кроме
самих двоичных данных. Этот тип данных обычно используется для информации о
компонентах оборудования. Эти данные можно выводить и редактировать в двоичном
или шестнадцатеричном формате в Regedit.
REG_SZ - это тип данных для текстовых строк фиксированной длины. Большинство
записей, где используется этот тип, содержит булевы значения или короткие текстовые
строки. Это очень распространенный тип данных, видимо, используемый
почти так же часто, как и тип REG_DWORD.
Обозначение SZ означает String/Zero, поскольку в конце строки ставится нулевой
байт. Regedit не показывает конечный нуль, поэтому вы можете не помнить об
этом (за исключением ситуации, когда вы пишете программу, работающую с реестром,
и тогда вы должны учитывать этот конечный байт).
В случае просмотра или редактирования записи этого типа в Regedit открывающееся
окно озаглавлено "String Editor" (Редактор строк).
REG_MULTI_SZ. Этот тип данных используется в записях данных, содержащих несколько
текстовых строк. Строки разделяются запятыми или пробелами, и запись
заканчивается двумя нуль-символами (которые не видны в редакторе реестра). В
окне редактирования Regedit видны двоичные данные (хотя вы можете видеть текст
в правой части этого окна).
Когда приложения ищут какую-либо запись типа REG_MULTI_SZ, им отправляется
вся запись; они не могут запрашивать конкретную строку (что важно знать,
если вы программист).
REG_EXPAND_SZ. Этот тип используется, когда в запись включаются одна или несколько
переменных, значения которых должны быть подставлены какой-либо службой
операционной системы или приложением. Это те же переменные, которые вы
используете в пакетных файлах и скриптах (например, %SystemRoot% или
%UserName%). Я так и не смог определить, почему сам реестр не может присваивать
значение такой переменной и передавать его запрашивающей службе или программе,
– ведь реестру известно, где искать эту информацию.
REG_FULL_RESOURCE_DESCRIPTOR. Этот тип записи используется для хранения списка
ресурсов для компонентов оборудования. Его содержимое представлено матрицей,
объединяющей ресурсы для определенного компонента (или драйвера). Regedit выводит
эту информацию в двоичном формате.
REG_LINK. Этот тип данных содержит символическую ссылку между данными и
каким-либо значением в реестре. Например, если приложению требуется знать уникальный
идентификатор пользователя (для информации о настройках), то оно может
искать идентификатор безопасности (security ID) текущего пользователя
( HKEY_CURRENT_USER ).
REG_DWORD_LITTLE_ENDIAN. Этот тип записи аналогичен типу записи REG_DWORD.
Он чаще всего используется для хранения чисел. Значение данных – это 32-битное
число, в котором наиболее значащий байт выводится на экран как старший (левый)
байт. Этот тип записи имеется только в Windows Server 2003, Windows 2000 и Windows
98. Технически он присутствует в Windows NT, но реестр Windows NT автоматически
преобразует данные, записанные в REG_DWORD_LITTLE_ENDIAN, в стандартный
тип REG_DWORD.
REG_DWORD_BIG_ENDIAN. Этот тип записи противоположен типу REG_DWORD_LITTLE_ENDIAN. Наиболее значащий байт выводится на экран
как младший (правый) байт, и это используется платформами, где байты следуют
именно в этом порядке (PowerPC и Alpha). Поскольку Windows Server 2003 не поддерживает
эти платформы, любые оставшиеся элементы реестра этого типа игнорируются.
HKEY_CLASSES_ROOT
HKEY_CLASSES_ROOT заполняется всеми видами базовой информации. У вас
редко будет повод работать интерактивно в этом поддереве; это набор "строительных
блоков", с помощью которых могут работать операционная система и приложения.
В этом поддереве существуют два типа данных.
Информация, ассоциируемая с типами файлов.
Данные конфигурации для объектов COM.
Регистрация классов на уровне пользователя
Наиболее интересными в этом поддереве являются изменения, появившиеся в
Windows 2000. Это поддерево является алиасом (псевдонимом), и его источником в
Windows NT было поддерево HKEY_LOCAL_MACHINE\Software\Classes. В Windows
Server 2003/2000 это поддерево остается алиасом, но его данные извлекаются из двух
источников.
HKEY_LOCAL_MACHINE\Software\Classes.
HKEY_CURRENT_USER\Software\Classes.
Последний из этих разделов реестра не существовал в его нынешней конфигурации
до Windows 2000. (Хотя такой раздел имеется в Windows 98, его содержимое
отличается от одноименного раздела в Windows Server 2003/2000. В Windows 98 этот
раздел содержит идентификаторы класса [ CLSID ] для используемых по умолчанию
значков рабочего стола ОС.)
Этот новый источник на уровне пользователя для HKEY_CLASSES_ROOT в
Microsoft назвали регистрацией классов на уровне пользователя (per-user class
registration). Это означает, что на компьютерах с несколькими пользователями может
содержаться различная информация о классах, которая регистрируется при установке
ПО каждым конкретным пользователем. Информация на уровне отдельного
пользователя может включать любое количество изменений в регистрации
классов, что приводит к созданию нескольких наборов уникальных записей для ПО,
которое устанавливается на данном компьютере.
Регистрация классов на уровне пользователя полезна для перемещающихся
(блуждающих) пользователей (на многих предприятиях разделяемое использование
компьютеров происходит реже, чем их использование перемещающимися пользователями).
Независимо от компьютера, на котором выполняет вход пользователь,
все идентификаторы классов, соответствия для типов файлов и другие связи с программным
обеспечением из реестра не изменяются, поскольку информация о регистрации
классов перемещается вместе с данным пользователем. Однако это средство
используется, только если вы используете возможности IntelliMirror для
создания профилей перемещающихся пользователей, поскольку операционная система
загружает информацию регистрации классов после загрузки базового профиля
пользователя, используя расширения IntelliMirror (информация регистрации
классов записывается в локальную часть профиля во время процесса входа).
Вы не можете выполнять запись в реестр для использования регистрации классов
на уровне пользователя; это задача программирования. Инструкции и средства
для записи в разделы на уровне пользователей содержатся в комплектах разработки
для программистов.
Данные HKEY_CLASSES_ROOT
Элементы данных в поддереве HKEY_CLASSES_ROOT снабжают операционную
систему информацией об устанавливаемых объектах. Просматривая это поддерево,
вы увидите два набора разделов, организованных в алфавитном порядке.
Первый набор разделов, содержащий все возможные расширения имен файлов
от * до z*.
Второй набор разделов – это идентификаторы программ и объектов.
Соответствия для типов файлов. Хотя термин "соответствия для типов файлов" (file
associations) использовался еще в Windows 3.1, современная реализация поддерева HKEY_CLASSES_ROOT стала намного больше как по размерам, так и функциям.
Подразделы, которые имеются для любого конкретного расширения имен файлов,
содержат информацию, которая используется для процессов COM, VB, автоматизации
и сценарных процессов. В панели данных для раздела расширения обычно
указывается тип файлов, соответствующий данному расширению имен. например,
раздел .avi содержит элемент данных типа REG_SZ с именем Content Type и значением
video/avi.

Для зарегистрированных типов файлов имеются подразделы, содержащие информацию,
которая используется системой при работе с этими типами файлов.
Например, подраздел с именем ShellNew указывает операционной системе, как создать
новый экземпляр файла этого типа. Некоторые разделы для расширений имеют
подразделы, связывающие данное расширение с одной или несколькими программами
(и каждый из этих подразделов имеет подраздел ShellNew).
Например, когда вы устанавливаете операционную систему, расширение .doc
автоматически регистрируется для WordPad.exe. Если выбрать подраздел .doc в HKEY_CLASSES_ROOT, то появится элемент данных Default со значением
WordPad.exe.Document.1. Если вы устанавливаете Microsoft Office, то в правой
панели появится второй элемент данных с именем Content Type и значением
application/msword. Дело в том, что процесс установки для Windows не перезаписывает
соответствие для WordPad; он сам добавляет второе соответствие. Не все программы
установки действуют таким образом, и вы можете встретить случаи, когда
при установке приложения происходит запись поверх предыдущих соответствий для
расширений имен файлов.
Если вам нужно изменить соответствие для расширений имен файлов, не используйте
реестр. Вместо этого используйте вкладку File Types (Типы файлов) диалогового
окна Folder Options (Свойства папки), которое можно вызвать из панели
управления или из меню Tools (Сервис) для системных папок. Вы можете добавлять
соответствия, если хотите ассоциировать несколько программ с одним расширением,
или можете изменить соответствие с одной программы на другую.

Идентификаторы объектов. Второй набор разделов в HKEY_CLASSES_ROOT – это
в основном идентификаторы программ и объектов вместе с некоторыми родительскими
разделами, которые поддерживают другие классы информации (например, CLSID ). Почти все эти разделы имеют подразделы, а количество и тип подразделов
зависит от объекта и типа информации об этом объекте, которая требуется операционной
системе. Для регистрируемых типов файлов часто используются один или
несколько следующих подразделов.
CLSID. Указывает уникальный идентификатор класса данного типа объектов.
DefaultIcon. Указывает файл, содержащий значок для этого типа файлов. Обычно это файл с расширением .exe или .dll. Обычно эти данные имеют формат Путь,x (где x – это целый идентификатор для значка, содержащегося в этом файле). Большинство файлов, для которых имеются значки, имеют несколько значков, и соответствующие идентификаторы нумеруются, начиная с 0.
Protocol. Содержит информацию, которая требуется системе для связывания, встраивания и редактирования данного типа файлов.
Shell. Имеет подразделы, в которых содержится информация о типах операций, которые вы можете выполнять с данным типом файлов.
Вы можете видеть действие данных из подраздела Shell в окне Windows Explorer
или My Computer. Если щелкнуть правой кнопкой на файле с зарегистрированным
расширением и выбрать пункт Open (Открыть), то система обратится к подразделу
\Shell\Open\Command и выполнит команду, которая находится в этом элементе данных.
Если выбрать пункт Print, то система использует команду, которая находится в
подразделе \Shell\Print\Command.
HKEY_CURRENT_USER
HKEY_CURRENT_USER содержит профиль для текущего выполнившего вход
пользователя. Это алиас для HKEY_USERS\<идентификатор безопасности выполнившего
вход пользователя>. Это поддерево на самом деле не содержит никаких данных;
в нем хранится только указатель на содержимое реального поддерева и выводится
эта информация. Однако важно знать, что изменения, внесенные в содержимое
одного из поддеревьев, приводят к изменению обоих поддеревьев.
Это средство экономии времени для операционной системы и приложений, поскольку
они выполняют поиск настроек пользователя, прежде чем выполнять задачи.
Без поддерева-алиаса HKEY_CURRENT_USER приходилось бы направлять
поиск к нужным разделам SID (идентификаторов безопасности) в HKEY_USERS,
чтобы обеспечить использование подходящих настроек. Для этого требовался бы
предварительный поиск, чтобы определить SID текущего пользователя.
При входе пользователя HKEY_CURRENT_USER создается заново с использованием
данных, которые составляют профиль выполняющего вход пользователя.
Если это первый вход данного пользователя, то никакого профиля еще нет, и операционная
система загружает настройки профиля Default User. При завершении
сеанса этого нового пользователя его профиль сохраняется под именем этого пользователя.
Сохраняются любые изменения, внесенные в конфигурацию этим пользователем.
Профили пользователей
Профили пользователей содержат настройки каждого пользователя, включая настройки
операционной системы, настройки приложений и политики. Эти настройки содержатся
в файле NTUSER.DAT, который содержится в подпапке каждого пользователя
( %SystemDrive%\Documents and Settings\<Имя-текущего-пользователя> ).
Процесс создания профиля для каждого пользователя начинается с загрузки
копии профиля Default User. Файл NTUSER.DAT в %SystemDrive%\Documents and
Settings\Default User содержит настройки конфигурации для пользователя по умолчанию,
которые хранятся в реестре в HKEY_USERS\.DEFAULT. Для профиля каждого
пользователя используются также общие программные группы, которые находятся
в %SystemDrive%\Documents and Settings\All Users.
Соглашения по созданию папок профилей пользователей (включая профиль
Default User и профиль All Users) в Windows Server 2003 отличаются от соглашений,
используемых в Windows NT 4.0.
При "чистой" установке Windows Server 2003 или при модернизации поверх Windows 2000/9.x папка для профилей пользователей создается на том же диске, что и для установки Windows 2000, а именно, в %SystemDrive%:\Documents and Settings.
В случае модернизации к Windows Server 2003 поверх Windows NT папки для профилей остаются в том же месте, что и в Windows NT, а именно, в %SystemRoot%\Profiles.
Примечание. Путь к профилю пользователя обычно представлен переменной
%ProfilePath%, а имя папки для пользователя создается из идентификатора этого
пользователя.
Файл NTUSER.DAT содержит включаемую в реестр часть профиля для выполнившего
вход пользователя (обычно в HKEY_CURRENT_USER ), и она загружается
в реестр во время входа пользователя. В соответствующей подпапке профиля содержатся
подпапки с дополнительными настройками.

Примечание. В дополнение к локальным профилям в Windows Server 2003, как и в
Windows 2000/NT, поддерживаются два дополнительных типа профилей: перемещаемые
(roaming) и обязательные (mandatory). Более подробные сведения о профилях
пользователей см. в лекции 12 курса "Внедрение, управление и поддержка сетевой инфраструктуры MS Windows Server 2003".
Данные HKEY_CURRENT_USER
Настройки среды текущего выполнившего вход пользователя содержатся во вложенной
иерархии подразделов. Почти все настройки конфигурации, которые находятся
здесь, можно изменять в графическом интерфейсе, а не интерактивно в самом
реестре.

AppEvents. Традиционно, начиная с Windows 9x, Microsoft выделяет целиком
отдельный раздел реестра, чтобы включать в него звуки для событий. Этот раздел содержит
два подраздела.
EventLabels. Группа подразделов с именами, которые фактически являются метками для типов событий. Элемент данных в каждом подразделе содержит описание соответствующей метки (и часто описание совпадает с самой меткой).
Schemes. Содержит дополнительные подразделы, в которых находятся разнообразные настройки, включая фактические имена звуковых файлов, связанных с событиями.
Пользователи связывают звуковые файлы с событиями в апплете Панели управления
Sounds And Audio Devices (Звук и аудиоустройства). Кроме того, схемы,
звуковые файлы и описания событий добавляют некоторые приложения (например,
небольшая мелодия, обозначающая поступление новой почты в Eudora).
Console. Раздел Console содержит настройки для подсистемы консоли Windows Server
2003, под управлением которой работают все приложения, выполняемые в текстовом режиме (включая Command Processor, который используется вами для работы в
командной строке). Информацию по заданию настроек конфигурации для окна
командной строки см. в лекции 7.
Control Panel. Этот раздел и его подразделы содержат настройки, которые управляют
внешним видом рабочего стола, вместе с определяемыми пользователем опциями
для многих апплетов, вызываемых из панели управления.
При раскрытии этого раздела появляются имена подразделов, соответствующие
некоторым апплетам, вместе с рядом других категорий настроек. Значения этих
элементов данных изменяются, когда пользователи вносят изменения в опции апплетов
панели управления. Большинство этих опций действуют сразу, без необходимости
перезагрузки операционной системы.
Не поддавайтесь мнению, что поскольку эти настройки обычно влияют только
на пользовательский интерфейс, они "безвредны". Администраторы, которые верят
этому и предоставляют пользователям полную свободу в изменении настроек
по умолчанию, часто раскаиваются в своем решении. Некоторые из настроек раздела
Control Panel и его подразделов оказывают большее влияние, чем это кажется.
Например, если неопытный пользователь существенно изменит видеонастройки,
это может привести к тому, что компьютер не сможет загружаться обычным образом.
Защищенная паролем экранная заставка (Screen Saver) может быть важна для
клиентской машины, на экране которой могут выводиться важные данные, и если
кого-то раздражает это средство, он может отключить его и уйти на обед, оставив
записи платежной ведомости на экране монитора. А тут еще всякие истории о
пользователях, которые защищают паролем экранную заставку, не записав или не запомнив
пароль, что вынуждает их обращаться в службу поддержки.
В Windows Server 2003 имеется обширный набор групповых политик, управляющих
доступом к апплетам панели управления (конкретную информацию см. в
лекции 13 курса "Внедрение, управление и поддержка сетевой инфраструктуры MS Windows Server 2003").
Environment. Этот раздел содержит записи данных, представляющие значения
переменных среды для выполнившего вход пользователя.

Включены переменные среды Temp и Tmp, поскольку приложения могут использовать
любую из этих переменных.
Вместо использования редактора реестра для работы с этими настройками вы
можете просматривать и изменять их в диалоговом окне System Properties (щелкните
правой кнопкой на My Computer и выберите пункт Properties). Во вкладке Advanced
(Дополнительно) щелкните на кнопке Environment Variables (Переменные среды),
чтобы увидеть информацию, аналогичную рисунку 4.1.
(рис 4.1) Настройки среды пользователя можно добавить в диалоговом окне System PropertiesЕсли вносятся изменения в настройки среды (через реестр или в диалоговом
окне System Properties), то новые настройки начинают действовать только при следующем
входе пользователя.
Внимание. Элементы данных в разделе Environment должны иметь тип данных
REG_SZ. Если ввести элемент другого типа или изменить существующий тип данных,
то система не будет заменять переменную ее значением.
Identities. Это раздел, отсутствовавший в предыдущих версиях Windows, не документирован
Microsoft. Это, видимо, какой-либо идентификатор для текущего пользователя,
но не основной идентификатор. В HKEY_USERS каждый пользователь имеет
уникальный идентификатор. Раздел уникального идентификатора текущего пользователя
имеет подраздел, значение которого совпадает со значением этого элемента
данных.
Keyboard Layout. В этом разделе хранится информация об установленных раскладках
клавиатуры, включая настройки устройств и драйверов. Кроме того, если пользователь
добавляет другие клавиатуры (файлы языков клавиатур), то информация об
этих клавиатурах содержится в подразделах.
Изменения по устройствам и драйверам следует вносить в апплете панели управления
Keyboard. Дополнительные клавиатуры добавляются в апплете Regional and
Language Options (Региональные стандарты и язык).
Network. Этот раздел существует, только если текущий пользователь имеет отображенные
сетевые диски. Сам этот раздел является родительским разделом и не содержит
существенных данных. Для каждого постоянного отображаемого диска имеется
дочерний подраздел, именем которого является буква-обозначение
отображаемого сетевого диска.

Если пользователь отображает какой-либо диск и не выбирает опцию Reconnect
At Logon (Снова подсоединяться при входе), то отображаемый диск не записывается
в реестр. (Все текущие отображаемые диски независимо от их постоянства имеют
значки в My Computer.)
Примечание. По умолчанию состояние опции Reconnect At Logon определяется тем,
что было выбрано на тот момент, когда пользователь отображал диск.
Каждый подраздел содержит информацию о соединении.
ConnectionType. Указывает тип соединения для данного отображения. Значение 1 указывает перенаправление диска; значение 2 указывает перенаправление принтера.
.)
ProviderName. Указывает сетевого провайдера, который создает это соединение. По умолчанию задано значение Microsoft Windows Networks (которое можно интерпретировать как Microsoft LanMan).
ProviderType. Указывает провайдера, используемого для соединения. Значение – это константа, заданная Microsoft. Для Microsoft LanMan эта константа равна 0x20000 (откройте этот элемент данных, чтобы увидеть данные в шестнадцатеричном формате). В случае сторонних провайдеров эта константа назначается данным провайдером.
RemotePath. UNC-путь к данному отображаемому разделяемому ресурсу.
UserName. Указывает пользовательское имя, которое будет использоваться для соединения. По умолчанию этот элемент данных не содержит значения, так как почти все время это выполнивший вход пользователь. Но если в конфигурации отображения указывается другое пользовательское имя для подсоединения к данному отображаемому диску, то оно представлено как значение в этом элементе данных. (В мастере отображения сетевого диска Map Network Drive Wizard имеется опция Connect Using A Different User Name [Подсоединяться с помощью другого пользовательского имени], с помощью которой можно задавать пользовательское имя и пароль для конфигурируемого соединения.)
Printers. Этот подраздел содержит информацию о принтерах, установленных на
данном компьютере, включая заданные пользователем параметры конфигурации.
Session Information. Этот подраздел, видимо, содержит информацию о приложениях,
используемых в текущем сеансе (единственный элемент данных в моем реестре – это
ProgramCount, значение которого равно количеству открытых на данный момент программ).
Я использовал слово "видимо", поскольку этот подраздел не документирован.
В группе по документированию реестра Windows мне сообщили, что они не документировали
этот раздел, но планируют сделать это в будущей версии Windows.
Software. В этом разделе хранятся пользовательские настройки приложений и программные
переменные, относящиеся к выполнившему вход пользователю. При внесении
изменений в конфигурацию пользователями эти элементы данных изменяются.
Подразделы этого раздела создаются не только программами установки ПО,
– здесь также хранятся все виды важных настроек операционной системы. Подробное
описание этих настроек выходит за рамки изложения данного курса.
UNICODE Program Groups. Этот раздел включен для совместимости с прежними версиями
– для пользователей, которые использовали Program Manager. Элементы данных,
если они имеются, определяют содержимое все личных программных групп в
Program Manager.
Volatile Environment. Этот раздел содержит настройки для сеанса текущего
пользователя.
HKEY_LOCAL_MACHINE
Это поддерево содержит информацию о компьютере, его оборудовании, установленных
драйверах устройств и опциях конфигурации (для настроек безопасности и
настроек ПО), которые влияют на всех пользователей данного компьютера. Оно
содержит пять разделов: Hardware, SAM, Security, Software и System. Все эти разделы,
кроме Hardware, присутствуют на диске в виде файлов ульев.
HKLM\Hardware
Ntdetect.com ("распознаватель оборудования" Windows Server 2003) создает весь этот
раздел во время загрузки. Эта информация содержится в RAM-памяти (вы можете
интерпретировать этот раздел как содержащийся в памяти файл улья), что позволяет
Windows находить информацию о данной машине во время загрузки операционной
системы. В иерархической структуре подразделов содержится информация обо
всех компонентах оборудования компьютера.
HKLM\SAM
Это данные, используемые для диспетчера учетных записей Security Accounts Manager
(SAM), недоступны через редакторы реестра. Улей SAM, находящийся по умолчанию
в %SystemRoot%\System32\Config является хранилищем таких данных для
пользователей и групп. В данные SAM включены все локальные пользователи и группы,
в том числе полномочия доступа пользователей к папкам, файлам и периферийному
оборудованию. Большое количество данных о группах и пользователях
домена, которые содержались в улье SAM реестра Windows NT 4, содержатся теперь
в Active Directory системы Windows Server 2003 (и Windows 2000).
HKLM\Security
Аналогично подразделу SAM данные подраздела Security содержатся в соответствующем
улье. Пользователи не могут просматривать или изменять эти данные интерактивно
в редакторе реестра. Улей Security находится в том же месте на жестком
диске, что и улей SAM.
Содержимое улья Security относится к средствам безопасности, и его данные
зависят от того, что вы еще работаете (или уже не работаете) в смешанном режиме.
Если серверы Windows NT все еще участвуют в аутентификации, то улей Security
содержит настройки конфигурации для пользовательских и групповых политик NT
4 в дополнение к политикам безопасности Windows Server 2003/Windows 2000.
HKLM\Software
Это обширный раздел, содержащий несколько уровней подразделов в виде иерархической
структуры. Компании-разработчики ПО обычно добавляют свой раздел в
это поддерево (и обычно добавляют тот же раздел в HKEY_CURRENT_USER\Software )
с подразделами для имени, версии и других компонентов продукта.
Операционная система хранит здесь настройки компьютера, включая настройки,
которые определяются групповыми политиками.
HKLM\System
Это огромный раздел! Многие из его подразделов и элементов данных управляют
загрузкой операционной системы (см. лекцию 5); другие подразделы и элементы данных
управляют почти всем, что делает операционная система (особенно службы ядра).
Это определяющий раздел для настроек конфигурации компьютера, но подробное
описание этого раздела выходит за рамки изложения данного курса.
HKEY_USERS
Это поддерево содержит подразделы для профиля Default User и всех известных
профилей пользователей для данного компьютера. Каждый подраздел с профилем
отдельного пользователя идентифицируется идентификатором безопасности
(Security ID, SID) и раскрывается в виде полного набора подразделов с настройками
(для раздела HKEY_CURRENT_USER, когда данный пользователь выполняет
вход).
HKEY_CURRENT_CONFIG
Это поддерево содержит информацию о профиле оборудования, который используется
данным компьютером при загрузке. Это алиас для HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profile\Current.
Regedit.exe
Regedit.exe – это единственный редактор реестра в Windows Server 2003; regedt32 уже
не используется. (Если открыть Start\Run и ввести regedt32, то откроется Regedit.exe.)
Большинство из тех, кто часто работает с реестром, всегда предпочитали интерфейс
Regedit.exe и использовали regedt32 только для задания настроек безопасности. Теперь
настройки безопасности доступны и в Regedit.exe, то есть фактически мы не
потеряли regedt32.
Как заставить Regedit не отображать последний из использовавшихся разделов
Одной из неприятных (для меня) особенностей Regedit в Windows Server 2003 (и в
Windows 2000) является то, что при открытии этого редактора появляется последний
из использовавшихся вами разделов. Иногда это раздел, находящийся далеко
внизу дерева, и требуется много работы, чтобы выполнить прокрутку, закрытие разделов
и прочие операции в левой панели для перехода к разделу, который вы хотите
использовать на этот раз. Чтобы изменить это поведение, вы должны выполнить
две задачи.
Удалить информацию о последнем из использовавшихся вами разделов.
Указать системе, чтобы она не записывала эту информацию при вашем следующем доступе к какому-либо разделу.
Чтобы выполнить эти задачи, выполните следующие шаги.
Перейдите в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ Applets\Regedit.
Дважды щелкните в правой панели на элементе данных LastKey и удалите значение, создав пустую строку.
Щелкните на кнопке OK, чтобы закрыть String Editor.
Снова щелкните правой кнопкой на разделе Regedit в левой панели и выберите в контекстном меню пункт Permissions (Полномочия).
Щелкните на кнопке Advanced, чтобы открыть диалоговое окно Advanced Security Settings (Дополнительные настройки безопасности).
Выберите свое пользовательское имя и щелкните на кнопке Edit, чтобы открыть диалоговое окно Permission Entry (Ввод полномочий).
Выберите опцию Deny (Запретить) для полномочий Set Value (Задание значения).
Выберите этот новый элемент Deny<ваша-пользовательская-учетная-запись> и щелкните на кнопке Edit. Затем выберите в раскрывающемся списке Apply Only (Применять только) вариант This Key Only (Только этот раздел). (Это ограничит запрет полномочий Set Value только подразделом Regedit, и не будет влиять на подраздел Favorites.)
Щелкните на кнопке OK три раза, чтобы закрыть диалоговое окно Permissions (после второго щелчка на кнопке OK вам нужно будет подтвердить тот факт, что вы внесли эти изменения).
Раздел Regedit не существует, если вы еще не запускали Regedit на данном компьютере.
Если этого раздела нет, не добавляйте его в реестр вручную. Вместо этого
откройте и закройте Regedit, чтобы создать этот раздел, и затем снова откройте
Regedit, чтобы выполнить указанные шаги.
Если вы не хотите выполнять все эти шаги, то можете закрывать все разделы
вручную, удерживая клавишу Shift и непрерывно нажимая клавишу "левая стрелка",
пока не произойдет сжатие всей иерархической структуры. Лично я считаю это
мучительным занятием.
Дистанционный доступ к реестрам
Вы можете использовать Regedit для поиска и управления в реестре другого компьютера
в вашей сети. Выберите File\Connect Network Registry (Подсоединиться к реестру
в сети), чтобы открыть диалоговое окно Select Computer (Выбор компьютера).
Введите имя компьютера, к которому вы хотите подсоединиться, или щелкните на
кнопке Advanced для поиска этого компьютера.

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

Вы можете одновременно подсоединяться к нескольким удаленным реестрам, и
каждый набор поддеревьев идентифицируется именем компьютера.

Чтобы отсоединиться от реестра удаленного компьютера, выберите
File\Disconnect Network Registry (Отсоединить реестр в сети), щелкните на имени
соответствующего компьютера и щелкните на кнопке OK.
Примечание. Если вы забыли отсоединиться, то при закрытии Regedit произойдет
автоматическое отсоединение всех удаленных реестров.
Поиск в реестре
Regedit содержит эффективное средство поиска данных в реестре. Чаще всего я открываю
реестр для поиска данных после установки приложения. Кроме того, иногда
поиск в реестре – это единственный способ найти причину сообщения об ошибке,
где говорится об отсутствии какого-либо исполняемого файла во время загрузки.
Поиск в реестре выполняется "сверху вниз", а это означает, что поиск начинается
с точки, где вы находились перед запуском поиска. Если начать сверху (My Computer),
то поиск охватывает все поддеревья. Если у вас нет причины выполнять поиск информации
о классах, то лучше всего начинать с HKEY_CURRENT_USER или HKEY_LOCAL_MACHINE. Если у вас есть основания быть уверенным, что искомые
данные находятся в какой-либо конкретной части реестра, раскройте соответствующее
поддерево и начните поиск с соответствующего раздела или подраздела.
Вы можете открыть диалоговое окно Regedit Find, используя любое из следующих
действий.
Выбрать Edit\Find.
Нажать клавишу F3.
Нажать клавиши CTRL-F.
После начала поиска клавиша F3 используется уже для другой цели – поиск следующего
экземпляра искомой строки.
В диалоговом окне Find введите строку поиска и, если это имеет смысл, введите
конкретный тип данных. Затем щелкните на кнопке Find Next (Найти далее).

Если вы нашли нужную строку и этот экземпляр вам не подходит, щелкните на
кнопке F3, чтобы искать следующий экземпляр.
Примечание. Часто бывает трудно определить, чем является искомая строка:
разделом, элементом данных или значением. Приложения могут добавлять подразделы с
именами, которые, казалось бы, должны быть именами элементов данных.
Создание списка Favorites
Если имеются разделы реестра, которые вы часто посещаете для просмотра данных
или работы с ними, то можете сохранить эти разделы в списке Favorites (Избранное).
Чтобы добавить какой-либо раздел в свой список, выделите этот раздел и выберите
Favorites\Add to Favorites. Появится диалоговое окно Add to Favorites, чтобы
позволяет вам присвоить имя данному элементу. По умолчанию выводится имя раздела,
но вы можете уточнять название. Например, я добавил в свой список Favorites
подраздел HKCU\Software\Microsoft\Windows\CurrentVersion\Policies. В диалоговом
окне было представлено имя Policies, но поскольку имеется много подразделов с
этим именем, я изменил название, чтобы стало ясно, что это раздел, где содержатся
пользовательские политики.

Ваш список избранных разделов появится в меню Favorites. Чтобы сразу перейти
в какой-либо подраздел, щелкните на его имени в этом списке.
Чтобы удалить какую-либо запись из вашего списка Favorites, выберите
Favorites\Remove Favorites. В диалоговом окне Remove Favorites выберите запись,
которую хотите удалить, и щелкните на кнопке OK.

В отличие от списка Favorites в Internet Explorer вы не можете переименовать
запись. Вместо этого приходится удалить запись и добавить ее снова. Наиболее быстрый
способ – это щелкнуть на записи, чтобы перейти в соответствующий раздел,
удалить запись и затем выбрать Add to Favorites (вы находитесь в нужном разделе),
чтобы снова создать запись (введя на этот раз более осмысленное описательное имя).
Настройка и устранение проблем с помощью реестра
Иногда единственный способ устранения проблемы – это работа с реестром. Во
многих случаях это результат консультаций со службами поддержки Microsoft или
компании, разрабатывающей ПО, либо результат инструкций, которые вы нашли в
какой-либо статье Microsoft Knowledge Base. Вы можете добавлять, удалять или изменять
подразделы и элементы данных реестра.
Экспорт разделов
Прежде чем работать с данными реестра, всегда создавайте резервную копию подраздела,
в котором вы работаете, чтобы можно было восстановить прежние данные,
если ваши изменения неверны. Для этого выберите подраздел, с которым планируете
работать, и выберите File\Export. В диалоговом окне Export Registry File (Экспорт
файла реестра) задайте имя файла и выберите тип файла Registration File (*.reg).
Windows Server 2003 выбирает папку My Documents как место по умолчанию, но вы
можете сохранять этот файл где угодно.
Тип файла по умолчанию для экспорта – это файл регистрации, имеющий расширение
.reg. Файл регистрации содержит все данные выбранного раздела и его
подразделов. Например, при экспорте раздела HKCU\Network (содержащего подразделы
для двух отображаемых дисков моего компьютера) получается следующий
текст.
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Network]
[HKEY_CURRENT_USER\Network\Y]
"RemotePath"="\\\\Admin\\NET Server CR"
"UserName"=dword:00000000
"ProviderName"="Microsoft Windows Network"
"ProviderType"="dword:00020000"
"ConnectionType"=dword:00000001
"DeferFlags"=dword:00000004
[HKEY_CURRENT_USER\Network\Z]
"RemotePath"="\\\\Admin\\NETcomprefFigs"
"UserName"=dword:00000000
"ProviderName"="Microsoft Windows Network"
"ProviderType"="dword:00020000"
"ConnectionType"=dword:00000001
"DeferFlags"=dword:00000004
Результат действия по умолчанию для .reg-файла (при двойном щелчке на этом
файле) – это слияние, то есть запись содержимого этого файла в реестр (то же самое
происходит при выборе File\Import в линейке меню Regedit). На самом деле распространение
.reg-файла – это удобный способ внесения необходимых изменений
в реестр на нескольких компьютерах (см. ниже раздел "Использование файлов регистрации").
Но если вам нужен только просмотр содержимого .reg-файла, щелкните правой
кнопкой на этом файле и выберите пункт Edit, в результате чего этот файл откроется
в Notepad.
Примечание. Файлы регистрации – это текстовые файлы Unicode.
Если вы внесли изменения в какой-либо раздел, но затем решили отказаться от
них, то можете дважды щелкнуть на созданном .reg-файле, чтобы восстановить прежние
данные в этом разделе и его подразделах. Windows попросит вас подтвердить
ваши действия.
При слиянии .reg-файла с реестром все данные этого файла записываются в реестр.
Но если вы добавили новый подраздел или новый элемент данных в существующий
подраздел, то при слиянии новый элемент не будет удален. Windows не удаляет
текущее содержимое раздела, с которым вы работаете, прежде чем выполнить
слияние с данными .reg-файла. Если вы добавили что-либо в реестр и затем решили
вернуться к прежним данным, то должны вручную удалить новые объекты.
Примечание. Вы можете также сохранять файлы реестра в файлах другого типа: для
реестров в-9x/NT в виде двоичных файлов ульев или в виде текстовых файлов. Кроме
того, вы можете загружать или удалять (unload) файлы ульев. Подобные подробности
выходят за рамки изложения данного курса, но вы можете подробнее ознакомиться с
реестром в моей книге "Admin911: Windows 2000 Registry", изданной в McGraw-Hill/
Os-orne (2000). Почти все в этой книге применимо также к Windows Server 2003.
Добавление элементов в реестр
Работая в Regedit, вы можете добавлять разделы или элементы данных в реестр. В
большинстве случаев добавляемые пользователем элементы – это данные в каком-либо
подразделе, но иногда требуется добавить новый подраздел и наполнить его
элементами данных.
Для добавления подраздела сделайте следующее.
Щелкните правой кнопкой на родительском разделе и выберите New\Key (Создать\Раздел).
Задайте имя этого нового раздела (следуя инструкциям из документации или из службы поддержки).
Для добавления элемента данных сделайте следующее.
Щелкните правой кнопкой на его разделе-контейнере и выберите New\<Тип-значения> (вы должны знать нужный тип значения элемента данных, который добавляете в реестр).
Задайте имя этого элемента данных (следуя инструкциям из документации или из службы поддержки).
Дважды щелкните на этом элементе данных и введите подходящее значение.
Удаление элементов реестра
Вы можете удалить из реестра любой раздел или элемент данных, за исключением
поддеревьев. Щелкните правой кнопкой на элементе, который хотите удалить, и
выберите в контекстном меню пункт Delete. Windows попросит вас подтвердить ваши
действия. Удаление элемента реестра – это опасная операция, поэтому убедитесь в
правильности полученных инструкций и в точности следуйте этим инструкциям.
Изменение значений элементов реестра
Значения реестра могут иметь различный формат: текстовый, шестнадцатеричный,
десятичный и двоичный. Тип значения обычно (но не всегда) связан с типом элемента
данных. Вы можете изменить значение элемента данных, дважды щелкнув на этом
элементе в правой панели, чтобы открыть диалоговое окно его редактирования.
Использование файлов регистрации
Чаще всего .reg-файлы используются для восстановления раздела, который вы
экспортировали как резервную копию, прежде чем внести в него изменения. Это
достаточно несложный способ восстановления поврежденного пользователем реестра.
Приложения часто содержат .reg-файлы в своей группе файлов установки и используют
их для регистрации информации конфигурирования. Любой пользователь
может написать .reg-файл (этап написания не представляет сложностей; опасной
частью может оказаться результат пересылки этого файла в реестр).
Вы можете использовать .reg-файлы, чтобы поручать администрирование реестров
вашей системы. Ознакомившись с тем, как они действуют и что они делают,
вы можете использовать их для управления пользователями, настройками ПО, настройками
компьютеров или другими элементами, хранящимися в реестре.
Написание и использование .reg-файлов – это способ отправки изменений реестра
на один или несколько компьютеров вашей системы вместо открытия реестра
на каждом компьютере и внесения изменений интерактивным способом. Такие изменения
реестра очень эффективны и обычно используются в следующих обстоятельствах.
Вы хотите освободить определенные компьютеры и определенных пользователей от политик уровня домена, которые были к ним применены.
Вы хотите ограничить определенных пользователей, чтобы не позволять им использовать определенные средства.
Вы хотите предложить пользователям возможность внесения поправок в их системы.
Обладая возможностями групповых политик для своих компьютеров Windows
Server 2003, вы можете также использовать .reg-файлы, чтобы вносить изменения в
реестр для управления доступом и поведением пользователей на компьютерах с более
ранними версиями Windows.
Если вы пишете программы, то даже в случае написания кода только для внутреннего
использования (в отличие от крупных компаний по разработке ПО) вы можете
использовать .reg-файлы, чтобы конфигурировать реестр для своей программы.
Архитектура .reg-файла
Файлы регистрации – это текстовые файлы с расширением .reg, использующие
следующий формат.
Имя инструментального средства
пустая строка
[Путь в реестре]
"Имя элемента данных"=Тип данных:значение
"Имя элемента данных"=Тип данных:значение
"Имя элемента данных"=Тип данных:значение
Имя инструментального средства. Первая строка идентифицирует средство, которое
используется для выполнения этой процедуры.
Для Windows Server 2003/2000/XP: Windows Registry Editor Version 5.00.
Для всех версий Windows 9x/NT: REGEDIT4.
После этой строки следует пустая строка.
Путь в реестре. Путь в реестре к разделу, содержащему значения, которые вы
импортируете, заключается в прямоугольные скобки, причем каждый уровень в иерархии
отделяется обратным слэшем, например, [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\System].
У вас может быть несколько путей в файле регистрации.
Примечание. Если нижний уровень иерархии, которую вы вводите в .reg-файле,
отсутствует в текущем реестре, то вы создаете новый подраздел. Содержимое файлов
регистрации пересылается в реестр в порядке его ввода: если вы создаете новый
раздел и подраздел в этом разделе, вводите строки в соответствующем порядке.
Данные. Данные, которые вы пересылаете в реестр, вводятся в следующем виде:
"Имя элемента данных"=Тип элемента данных:Значение элемента данных
Имя элемента данных заключается в кавычки.
После элемента данных непосредственно следует знак равенства (=).
Тип элемента данных непосредственно следует после знака равенства и заканчивается символом двоеточие (:).
Значение элемента данных должно вводиться в подходящем формате (строчный, шестнадцатеричный, десятичный или двоичный).
Вы можете ввести несколько строк элементов данных для одного пути в реестре,
например:
"GroupPolicyRefreshTime"=dword:00000014
"GroupPolicyRefreshTimeOffset"=dword:0000000f
В этих двух строках представлены шестнадцатеричные значения для значений
данных: 00000014 – это шестнадцатеричный эквивалент 20, и 0000000f – это
шестнадцатеричный эквивалент 15. Если вы не очень хорошо разбираетесь в шестнадцатеричных
и других трудночитаемых данных, ограничьтесь при создании элементов
данных в своем .reg-файле элементами данных, которые содержат строки, либо
используют 0 и 1 для отключения и включения политики или какого-либо запрещения.
В реестре нет булева типа данных. Но вы можете пересылать булевы данные в
реестр, используя в .reg-файле элементы типа DWORD (4 байта) или STRING (2
байта), и при этом не обязательно вводить полную строку. Просто введите 1, и вы
увидите в реестре значение 0x00000001(1).
Слияние файла регистрации с реестром
Файлы регистрации используются путем слияния .reg-файла с реестром, осуществляемого
в Regedit. Имеется три способа пересылки содержимого этого файла в реестр.
Дважды щелкнуть на этом файле (действие по умолчанию для .reg-файла – это слияние).
Ввести Regedit <имя_файла>.reg в командной строке.
Выбрать File\Import в линейке меню Regedit.
Совет. Если вы хотите запускать .reg-файлы из командной строки в несопровождаемом
режиме или хотите формировать пакетные файлы, с помощью которых происходит
слияние .reg-файлов с реестром без вмешательства пользователя, используйте
команду Regedit со следующим синтаксисом: Regedit /s <имя_файла>.reg.
Во время пересылки .reg-файла в реестр происходят следующие действия.
Если путь в этом файле не указан, он добавляется.
Если какой-либо элемент данных еще не существует, он добавляется (вместе с его значением).
Если какой-либо элемент данных уже существует, его значение заменяется значением из .reg-файла.
Файлы регистрации действуют, даже если вы применили групповую политику,
отключающую средства редактирования реестра (в противном случае программы и
система не могли бы вносить изменения в реестр, если это требуется).
Вы можете распространять .reg-файл через электронную почту или позволять
пользователям копировать его из разделяемой точки сети во время входа (с помощью
какой-либо команды в скрипте входа). Затем вы можете предоставлять каждому
пользователю возможность его использования.
Пример файла регистрации
В качестве примера здесь приводится текст .reg-файла, слияние которого я выполняю
на всех компьютерах моей сети. Он добавляет в контекстное меню для папок
опцию, позволяющую открывать окно командной строки. Я предпочитаю открывать
окно Command Prompt для конкретного места вместо использования команды
CD для перехода в структуре папок.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\OpenNew]
@="Command Window Here" (здесь окно командной строки)
[HKEY_CLASSES_ROOT\Directory\shell\OpenNew\Command]
@="cmd.exe /k cd %1"
Чтобы создать этот .reg-файл путем изменений в реестре и экспорта раздела,
выполните следующие действия в Regedit.
Выберите раздел HKEY_CLASSES_ROOT\Directory\shell.
Создайте новый подраздел с именем OpenNew.
Откройте элемент данных Default в правой панели и присвойте ему значение Command Window Here. (Это значение реестра представляет фразу, которая будет появляться в контекстном меню, поэтому вы можете заменить фразу нужным для вас образом.)
Создайте новый подраздел с именем Command в подразделе OpenNew.
Откройте элемент данных Default в подразделе Command и введите значение cmd.exe /k cd %1.
Выделите подраздел OpenNew и выберите File\Export для создания .reg-файла, который содержит эти новые подразделы вместе с их данными.
Если на вашем компьютере несколько дисков, то вы можете добавить аналогичную
команду в контекстное меню, которое появляется при щелчке правой кнопкой
на каком-либо диске в Windows Explorer или в My Computer. Выполняются те же
шаги, что и при создании команды для папок, со следующими изменениями.
В качестве начальной точки используйте раздел HKEY_CLASSES_ROOT\Drive\shell.
Для элемента данных Default в подразделе HKEY_CLASSES_ROOT\Drive\shell\OpenNew\Command введите значение cmd.exe /k.
Экспортируйте раздел HKEY_CLASSES_ROOT\Drive\shell и распространяйте
этот .reg-файл всем пользователям, которые хотели бы использовать это удобное
средство.
Удаление элементов реестра с помощью .reg-файла
Вы можете также использовать .reg-файл для удаления подразделов и элементов
данных. Это настолько просто, что даже вызывает опасения.
Чтобы удалить подраздел, введите знак "минус" в начале имени этого подраздела.
Чтобы удалить отдельный элемент данных, введите знак "минус" вместо его значения ("Имя_элемента_данных=-").
Средства безопасности для реестра
Работа со средствами безопасности для реестра очень похожа на работу со средствами
безопасности, которые вы получаете с помощью файловой системы NTFS.
Вы можете применять полномочия доступа к разделам и подразделам на уровне группы
или пользователя, определять, хотите ли вы, чтобы полномочия были наследуемыми,
и создавать целую иерархию полномочий с любым уровнем уточнений. Иными
словами, как и в NTFS, у каждого раздела реестра есть свой список управления
доступом ACL (access control list).
По умолчанию заданы довольно жесткие уровни безопасности реестра. Администраторы
имеют полный доступ ко всему реестру, но другие пользователи имеют
полный доступ только к разделам, которые относятся к их собственным пользовательским
учетным записям (сюда включается HKEY_CURRENT_USER ), а также
доступ только по чтению к разделам, которые относятся к данному компьютеру и
установленному ПО. Тем не менее, вам может потребоваться изменение настроек
безопасности реестра, чтобы предоставлять или отменять полномочия на уровне
группы или пользователя. В этом разделе дается описание задач, связанных с заданием
полномочий.
Описание полномочий
Полномочия, которые вы можете применять к определенному разделу реестра, доступны
на двух уровнях.
Базовые полномочия, которые составлены из отдельных полномочий.
Отдельные полномочия.
Базовые полномочия – это группа из отдельных (более конкретных) полномочий.
Для большинства разделов базовые полномочия – это Full Control (Полный
доступ) и Read (Чтение).
Отдельные полномочия приводятся в таблице 4.2. Все полномочия из
таблицы 4.2 предоставляются пользователям, имеющим полномочия Full Control. Полномочия,
которые не попадают в группу Read (третья колонка табл. 4.2), называются специальными полномочиями.
Полномочия, применяемые к разделам реестра
| Полномочия |
Описание |
Включается в базовые полномочия Read? |
| Query Value |
Просмотр значения в элементе данных |
Да |
| Set Value |
Изменение значения в элементе данных |
Нет |
| Create Subkey |
Создание подраздела |
Нет |
| Enumerate Subkey |
Просмотр всех подразделов |
Да |
| Notify |
Получение или задание уведомлений аудита |
Да |
| Create Link |
Создание ссылки на другой раздел |
Нет |
| Delete |
Удаление раздела (и подразделов) |
Нет |
| Write DAC |
Изменение полномочий DAC |
Нет |
| Write Owner |
Изменение владельца |
Нет |
| Read Control |
Чтение списка ACL |
Да |
Работа с полномочиями
Для просмотра или задания полномочий по разделу реестра (включая поддеревья
верхнего уровня) щелкните правой кнопкой на этом разделе и выберите в контекстном
меню пункт Permissions. Появится диалоговое окно Permissions для этого раздела,
аналогичное рисунку 4.2.
(рис 4.2) Базовые полномочия для групп и пользователей представлены в диалоговом окне PermissionsПри выборе каждого пользователя или группы вы видите полномочия. Полномочия,
которые затенены, наследуются от родительских разделов и не могут быть
изменены в этом диалоговом окне.
Добавление пользователей или групп в список полномочий
Вы можете добавлять пользователей или группы в список полномочий доступ к
разделу с помощью следующих шагов.
Щелкните на кнопке Add, чтобы открыть диалоговое окно Select Users, Computers, Or Groups (Выбор пользователей, компьютеров или групп).
Щелкните на кнопке Locations и выберите компьютер или домен, который хотите использовать.
Если вы знаете имена пользователей и/или групп, введите имена, которые хотите добавить, отделяя каждое имя символом "точка с запятой". Если вы не знаете имен, щелкните на кнопке Advanced, чтобы задать критерии поиска, и выберите нужные имена. По окончании ввода имен щелкните на кнопке OK.
Вернувшись в диалоговое окно Permissions, выделите каждую новую запись и назначьте полномочия Read или Full Control. (Если вы не хотите использовать эти базовые полномочия, см. следующий раздел, "Задание специальных полномочий".)
По окончании щелкните на кнопке OK.
Примечание. Вы можете также удалить пользователя или группу в этом диалоговом
окне, выбрав соответствующую запись и щелкнув на кнопке Remove.
Задание специальных полномочий
Если вы хотите задать более конкретные полномочия для группы или пользователя,
то можете задать специальные полномочия, используя следующие шаги.
В диалоговом окне Permissions щелкните на кнопке Advanced, чтобы открыть для данного раздела диалоговое окно Advanced Security Settings.
Дважды щелкните на пользователе или группе, для которого хотите задать специальные полномочия (см. рис 4.3).
В секции Permissions установите флажок Allow (Разрешить) или Deny (Запретить) для каждого вида полномочий, которые вы хотите задать.
Задайте наследование, выбрав один из вариантов в раскрывающемся списке поля Apply Onto (Применять к).This key only (Только к этому разделу).
This key and subkeys (К этому разделу и подразделам).
Subkeys only (Только к подразделам).
(рис 4.3) Текущие полномочия для этого пользователя были заданы путем выбора базовых полномочий Read
Щелкните на кнопке OK, чтобы вернуться в диалоговое окно Advanced Security Settings. Задайте полномочия для другого пользователя или группы либо два раза щелкните на кнопках OK, чтобы закрыть все диалоговые окна.
Внимание. Не изменяйте никаких полномочий для раздела System, поскольку это может
вызвать проблемы для операционной системы и установленных приложений.
Изменение владельца раздела
Владелец раздела реестра может указывать пользователей и группы, которым разрешается
работа с этим разделом, что дает полный доступ конкретному человеку.
Получение владения разделом реестра является ответственной задачей, и она должна
выполняться только администратором, у которого имеется проблема доступа к
данному разделу (обычно в результате неверных изменений в списке ACL). По умолчанию
для компьютеров Windows Server 2003 владение определяется следующим
образом.
Для компьютеров, используемых как рядовые серверы, это члены локальной группы Administrators.
Для компьютеров, работающих как контроллеры домена, это члены группы Domain Administrators.
Для просмотра или изменения владения щелкните правой кнопкой на данном
разделе и выберите в контекстном меню пункт Permissions. Щелкните на кнопке
Advanced и затем щелкните на вкладке Owner (Владелец). Как видно из рисунка 4.4,
текущий владелец показан вверху вкладки Owner, и ниже представлен список допустимым
пользователей, которые могут стать владельцами.
(рис 4.4) В список, доступный для передачи владения, включен также текущий пользовательВы можете передавать владение любому пользователю из этого списка. Если вы хотите
выбрать владельца, находящегося вне текущих доступных групп Administrator,
щелкните на кнопке Other Users Or Groups (Другие пользователи или группы), чтобы
открыть диалоговое окно Select User, Computer, Or Group. Выберите имя, которое
хотите добавить в список, и затем вернитесь во вкладку Owner и выделите это
имя. Но прежде чем предоставить владение пользователю или группе, вы должны
изменить полномочия, разрешив полномочия Write Owner (предоставив новому владельцу
право управлять владением).
Аудит реестра
Вам может потребоваться аудит определенных действий с реестром, чтобы попытаться
найти источник какой-либо проблемы. Или вам может потребоваться аудит
просто из любопытства (если у вас достаточный объем свободного места на диске
для журнала аудита).
У вас имеются достаточно мощные и гибкие возможности аудита операций с
реестром; вы можете выполнять аудит разделов, пользователей, групп и любых
сочетаний. Для аудита операций с реестром нужно выполнить три шага.
Включить аудит как групповую политику.
Задать опции конфигурирования аудита в реестре.
Просматривать результаты аудита в журнале Security оснастки Event Viewer.
Включение аудита
Прежде чем выполнять аудит операций с реестром, вы должны включить аудит,
который отключен по умолчанию в Windows Server 2003. Включение/отключение
аудита осуществляется с помощью групповой политики, и вы можете использовать
для этого политику на уровне домена или локальную политику в зависимости от
действий в реестре, аудит которых хотите выполнять.
Включение аудита для домена. Чтобы включить аудит реестра на уровне домена,
откройте оснастку Active Directory Users and Computers и затем выполните следующие
шаги.
Откройте диалоговое окно Properties для данного домена.
Щелкните на вкладке Group Policy.
Выберите объект Default Domain Policy и щелкните на кнопке Edit.
Появится консоль Group Policy. Перейдите в Computer Configuration\Windows Settings\Security Settings\Local Policies\Audit Policy.
Дважды щелкните на записи Audit object access в правой панели, чтобы открыть диалоговое окно Properties.
Включите эту политику, установив флажок Define This Policy Settings (Определить следующие настройки политики) и установив флажок Success и/или флажок Failure (аудит успешных и/или неудачных попыток).
Примечание. Политики аудита реестра позволяют также выбирать аудит успешных
или неудачных попыток для каждого типа доступа к реестру. Это позволяет осуществлять
избирательную фильтрацию, не допуская излишнего разрастания файла
журнала.
Включение аудита на локальном компьютере. Чтобы включить аудит реестра на
каком-либо компьютере, выполните следующие шаги.
Откройте средство администрирования Local Security Settings.
В дереве консоли раскройте Local Policies и выберите Audit Policy.
Дважды щелкните на записи Audit object access в правой панели и выберите действия, аудит которых хотите осуществлять.
Задание опций аудита в реестре
После включения аудита вы можете задать действия, аудит которых хотите осуществлять.
Откройте Regedit, щелкните правой кнопкой на родительском разделе, который
хотите использовать как верхнюю точку процесса аудита (по умолчанию аудит
наследуется подразделами) и выберите в контекстном меню пункт Permissions. Щелкните
на кнопке Advanced и перейдите во вкладку Audit. Щелкните на кнопке Add,
чтобы начать добавление пользователей и групп, аудит которых хотите осуществлять.
Используйте следующие рекомендации.
Для аудита действий определенного лица выберите этого пользователя.
Для аудита, позволяющего увидеть, кто и что делает в реестре, лучше всего выбрать группу Everyone.
В более сложных случаях выберите подходящие группы и пользователей.
При выборе каждого пользователя или группы выберите также действия, аудит
которых хотите осуществлять, как это показано на рисунке 4.5.
По умолчанию аудит выполняется для текущего раздела и наследуется подразделами.
Вы можете изменить это поведение, выбрав другой вариант в раскрывающемся
списке Apply Onto. Имеются три варианта: This key only, This key and subkeys
и Subkeys only.
Вот некоторые советы по конфигурированию аудита.
Включение аудита вызывает снижение производительности. Чем больше групп и пользователей вы добавляете, тем больше задач вы включаете в аудит и тем больше влияете на уровень производительности.
Почти нет смысла выполнять аудит неудачных попыток отдельных пользователей, поскольку в большинстве случаев это происходит из-за недостаточных полномочий пользователя. Если этот пользователь не может выполнить какую-либо задачу, то нет смысла сообщать об этом в виде события аудита. Если приложения сообщают об ошибках и служба поддержки предполагает наличие проблемы доступа к данным реестра, задайте аудит неудачных попыток для раздела SYSTEM.
Не выполняйте аудит успешных попыток для обычных задач, которые не могут
принести вреда, например, запрос значения. Этот может привести только к огромным
размерам журнала.
(рис 4.5) Выберите действие и результат для каждой задачи реестра, аудит которой хотите осуществлять
Просмотр журнала аудита
Аудит – это события системы безопасности, поэтому результаты аудита находятся в
журнале Security оснастки Event Viewer. Откройте Event Viewer и выберите журнал
Security для просмотра событий аудита.
Reg.exe
Reg.exe – это надежное и многофункциональное средство командной строки, которое
вы можете использовать для управления записями реестра. Как и для команды
net, для reg.exe требуется вторая команда, например, reg add. Эта программа позволяет
работать как с локальными, так и с удаленными реестрами. Но если вы применяете
это средство к удаленному реестру, то можете работать только с HKEY_LOCAL_MACHINE и HKEY_CURRENT_USER.
Общие указания по работе с Reg.exe
Существует несколько общих правил и рекомендаций по работе с командами reg, и
они приводятся здесь, чтобы не повторять их для каждой команды.
При вводе имени раздела или подраздела вы должны ввести полный путь к этому
разделу, начиная с поддерева. Однако вы можете использовать следующие сокращения
для имен поддеревьев.
| Сокращение |
Поддерево |
| HKCR |
HKEY_CLASSES_ROOT |
| HKLM |
HKEY_LOCAL_MACHINE |
| HKCU |
HKEY_CURRENT_USER |
| HKCC |
HKEY_CURRENT_CONFIGURATION |
Кроме того, вам будут полезны следующие сведения.
Указываемый путь не зависит от используемого регистра букв.
Имя нового раздела зависит от регистра букв.
Имена разделов, содержащие пробелы, должны быть заключены в кавычки.
Регистр букв не имеет значения для существующих элементов данных.
Имя нового элемента данных и его значение зависят от регистра букв.
Зависимость от регистра букв означает, что соответствующие элементы записываются
в реестр в том виде, как вы их вводите, то есть с прописными и строчными
буквами. Для функций реестра это обычно не имеет значения, поскольку, за несколькими
исключениями, поиск разделов, элементов данных или значений в реестре
не завит от регистра букв. Но вы можете, например, ввести NewFeatureName
вместо newfeaturename, поскольку использование прописных букв упрощает чтение
записи.
Reg Add
Команда reg add используется для добавления в реестр раздела и/или элемента данных.
Она имеет следующий синтаксис:
reg add [\\Машина\]Имя_раздела[/v Имя_значения\/ve][/t Тип]
[/s Разделитель][/d Данные][/f]
где
\\Машина – это имя удаленного компьютера. Пропустите этот параметр, если вы
работаете на локальной машине. Имя_раздела – это имя раздела, где будет помещена
новая запись, или имя нового раздела, который вы добавляете в реестр. Если вы
добавляете раздел, то можете не указывать все остальные параметры (см. ниже).
Например, если у вас имеется раздел с именем HKEY_CURRENT_USER\Software\CompanyDatabase
и вы хотите добавить подраздел с именем ColorScheme, введите следующую команду.
reg add HKCU\Software\ CompanyDatabase\ColorScheme
Система возвратит сообщение "The operation completed successfully" (Операция
успешно завершена).
Примечание. Если вы используете пробел в имени, не используя для этого имени
кавычек, то система предполагает, что любой текст после первого слова является
параметром, и выводит сообщение об ошибке: "Too many command-line parameters"
(Слишком много параметров командной строки).
Если вы вводите новый элемент данных, то используются следующие параметры.
Для одновременного ввода нового раздела и нового элемента данных просто
введите имя нового раздела в конце пути.
/v Имя_значения – это имя нового элемента данных.
Если это имя содержит пробелы, заключите его в кавычки.
/ve указывает пустое значение.
/t Тип указывает тип данных для нового элемента данных. Если пропустить этот
параметр, то по умолчанию задается тип данных REG_SZ.
/s Разделитель указывает символ, который вы хотите использовать как разделитель
в случае нескольких строк данных (для типов данных REG_MULTI_SZ ).
/d Данные – это данные, которые вы хотите присвоить добавляемому элементу данных.
/f вызывает перезапись значения существующей записи.
Reg Delete
Команда reg delete используется для удаления подразделов и/или элементов данных
из реестра. Она имеет следующий синтаксис.
reg delete [\\Машина\]Имя_раздела[/v Имя_значения][/va][/f]
где
\\Машина – это имя удаленного компьютера. Пропустите этот параметр, если вы
работаете в локальном реестре.
Имя_раздела – это подраздел для данной записи (или подраздел, который вы хотите
удалить). Указывайте полный путь.
/v Имя_значения – удаление элемента данных с этим именем. Если это имя содержит
пробелы, заключите его в кавычки.
/va – удаление всех элементов данных в указанном подразделе.
/ve – удаление пустого элемента данных.
/f вызывает операцию удаления без подтверждения пользователем.
Reg Copy
Команда reg copy используется для копирования записи реестра в новое место в
локальном или удаленном реестре. Она имеет следующий синтаксис.
reg copy [\\Машина\]Исходный_раздел[\\Машина\]Целевой_раздел[/s][/f]
где
\\Машина\]Исходный_раздел – это имя компьютера и путь в реестре для исходного
компьютера. Пропустите параметр "Машина", если это локальный компьютер.
\\Машина\]Целевой_раздел – это имя компьютера и путь в реестре для целевого
компьютера. Пропустите параметр "Машина", если это локальный компьютер.
/s – копирование всех подразделов, находящихся в последнем разделе указанного
пути, вместе с элементами данных, содержащимися в этих подразделах.
/f вызывает копирование без запроса подтверждения пользователем.
Reg Compare
Команда reg compare используется для сравнения одной записи реестра с другой
записью реестра на локальном или удаленном компьютере. Она имеет следующий
синтаксис.
reg compare [\\Машина\]Имя_раздела_1[\\Машина\]Имя_раздела_2
[/v Имя_значения][/s][/f] [Output]
где
Машина – это имя компьютера. Пропустите этот параметр для локального
компьютера.
Имя_раздела_1, Имя_раздела_2 – указывают полный путь в реестре к первому и
второму подразделам.
/v Имя_значения – сравнение значений элемента данных, указанного параметром Имя_значения (имена элементов данных, содержащих пробелы, заключайте в кавычки).
Параметр Output принимает одно из следующих значений.
/oa – вывод всех отличий и совпадений.
/od – вывод только отличий.
/os – вывод только совпадений.
/on – не выводится никаких результатов.
Система отвечает одним из следующих возвращаемых кодов.
0 Сравнение прошло успешно, и нет никаких отличий.
1 Сравнение провести не удалось.
2 Сравнение прошло успешно, и есть отличия.
Reg Export
Команда reg export используется для экспорта записи реестра в файл. Эта команда дает
такой же результат, как и команда File\Export Registry File при работе в Regedit. Эта
команда работает только с локальным реестром. Она имеет следующий синтаксис.
reg export Имя_раздела Имя_файла [/y]
где
Имя_раздела – полный путь в реестре к разделу, который вы хотите экспортировать.
Имя_файла – имя .reg-файла, в который вы хотите экспортировать раздел.
/y – перезапись существующего файла с именем Имя_файла без запроса подтверждения.
Reg Import
Команда reg import используется для импорта записи реестра из .reg-файла. Она
имеет следующий синтаксис.
reg import Имя_файла
где
Имя_файла – имя .reg-файла, который вы хотите импортировать.
Эта команда дает такой же результат, как и команда File\Import Registry File при
работе в Regedit или двойной щелчок на .reg-файле.
Reg Save
Команда reg save используется для сохранения раздела в файле улья. Она имеет
следующий синтаксис.
reg save \\Машина Имя_раздела Имя_файла [/y]
где
\\Машина – это имя удаленного компьютера (пропустите этот параметр для
локального компьютера).
Имя_раздела – полный путь в реестре к разделу.
Имя_файла – целевой файл (с расширением .hiv).
/y – перезапись существующего файла с именем Имя_файла без запроса
подтверждения перезаписи.
Reg Restore
Команда reg restore используется для восстановления какого-либо раздела из
HIV-файла, созданного командой reg save. Она имеет следующий синтаксис.
reg restore [\\Машина] Имя_раздела Имя_файла
где
\\Машина – это имя удаленного компьютера (пропустите этот параметр для локального компьютера).
Имя_раздела – полный путь в реестре к целевому разделу.
Имя_файла – имя сохраненного ранее файла, из которого вы хотите теперь выполнить восстановление
Reg Load
Команда reg load используется для загрузки файла улья (созданного с помощью
команды reg save) в другую часть реестра. Это полезно при поиске проблемных записей
реестра. Она имеет следующий синтаксис.
где
\\Машина – это имя удаленного компьютера (пропустите этот параметр для
локального компьютера).
Имя_раздела – полный путь к месту в реестре, которое вы хотите использовать для
размещения данного улья.
Имя_файла – имя файла улья.
Примечание. Этот раздел не является постоянным, и он исчезает, когда вы
перезагружаете компьютер.
Reg Unload
Команда reg unload используется для удаления улья, который вы загрузили с
помощью команды reg load. Она имеет следующий синтаксис.
reg unload \\Машина Имя_раздела
где
\\Машина – это имя удаленного компьютера (пропустите этот параметр для
локального компьютера).
Имя_раздела – полный путь к месту в реестре, где содержится загруженный вами
файл.
Reg Query
Команда reg query используется для получения информации о записи или
нескольких записях в разделе или подразделе. Она имеет следующий синтаксис.
reg query \\Машина Имя_раздела [{/v Имя_значения\/ve}][/s]
[/se Разделитель][/f Данные] [{/k\/d}][/c][/e][/t Тип][/z]
где
Машина – это имя удаленного компьютера (пропустите этот параметр для локального компьютера).
Имя_раздела – полный путь к разделу, который вы запрашиваете.
/v Имя_значения – имя запрашиваемого элемента данных реестра. Если этот
параметр опущен, выдаются все элементы данных из раздела Имя_раздела. Имя_значения не является обязательным параметром, если используется параметр /f.
/ve – запрашиваются пустые элементы данных.
/s – запрашиваются все подразделы и элементы данных.
/se Разделитель указывает разделитель значений, который вы хотите искать в
элементах данных типа REG_MULTI_SZ. Если Разделитель не указан, то система использует \0.
RegMon
Один мой знакомый по журналу, для которого я пишу статьи (Windows .Net
Magazine), является очень хорошим специалистом по операционным системам. Я
уже давно (начиная с Windows NT) использую написанную им утилиту под названием
RegMon, которая позволяет мне следить за доступом приложений к реестру в
реальном масштабе времени.
Вы можете задавать фильтры, чтобы ограничивать типы информации, о которой
сообщает эта программа, выделять нужную запись и переходить непосредственно
к подразделу реестра, на которую ссылается эта запись. Это отличный способ
отслеживания элементов реестра, которые добавляются во время установки ПО.
Запустите regmon.exe, прежде чем программа установки начнет копировать файлы и
выполнять запись в разделы реестра, и вы узнаете все, что происходит в реестре.
Сохраните результаты, и затем проверьте эти записи после того, как удалите
(деинсталлируете) соответствующее ПО. Поскольку большинство процедур деинсталляции
не могут целиком удалить информацию реестра, которая была записана во время
установки, то вы можете очистить свой реестр вручную.
RegMon распространяется бесплатно, и вы можете загрузить ее из
http://www.sysinternals.com. В дополнение к этой утилите вы найдете много полезных
утилит на данном веб-сайте.
В систему Windows, начиная с Windows 95, включается единое хранилище, которое
называется реестром (registry) и используется для хранения информации об этой
операционной системе и установленных приложениях. Реестр является базой данных,
и он используется почти во всем, что вы делаете. Он содержит информацию о
самом компьютере, его оборудовании, периферийных устройствах, подсоединенных
к компьютеру, об установленном ПО, а также о пользователях, выполняющих
вход на этот компьютер.
Приложения используют реестр все время, используя стандартные интерфейсы
прикладных программ WIN32 API для доступа к необходимым данным. Программы
установки ПО используют стандартные API для добавления, изменения или удаления
данных реестра. Реально реестр принадлежит программному обеспечению
(включая операционную систему) и предназначен для того, чтобы предоставлять
информацию для ПО, а не для пользователей.
Большинство данных реестра, которые записываются в результате действий
пользователей, помещаются туда из диалоговых окон, в которых работает пользователь
(например, из апплетов Панели управления [Control Panel]), или из групповых
политик. Предполагается, что вы вносите изменения в элементы конфигурации
в окнах графического интерфейса и в диалоговых окнах.
Однако в реальных условиях многие из нас считают, что непосредственная работа
в реестре выполняется быстрее и проще, чем прохождение через последовательность
диалоговых окон. Кроме того, некоторые проблемы могут быть разрешены
только путем непосредственных изменений в реестре.
Обзор реестра
Реестр пополнялся из целого ряда управляющих файлов и баз данных, которые имелись
в предыдущих версиях Windows, что логически привело к современной реализации
этого хранилища настроек Windows Server 2003.
В системе Microsoft Windows 3.1, которая была первой широко используемой
версией Windows (особенно в бизнесе) использовались три типа файлов, определяющих
оборудование компьютера и приложения для этой операционной системы.
Два типа файлов использовались для инициализации и имели расширение имени
.ini, и третий тип файлов использовался как база данных для регистрации. Среди
файлов инициализации (.ini-файлов) имелись файлы, включенные в Windows, а также
множество частных .ini-файлов из приложений (прикладного ПО).
В Windows 3.1 использовались шесть .ini-файлов для загрузки и управления средой
Windows (control.ini, progman.ini, protocol.ini, system.ini, win.ini и winfile.ini).
Файл win.ini был основным местом хранения информации, относящейся к конфигурации
ПО этой операционной системы, а также специальной информации для
всей системы, добавляемой приложениями. Поскольку каждое приложение вносило
изменения в файл win.ini (не принимая во внимание все остальные приложения),
этот файл разрастался очень быстро. Это вызывало проблемы, когда размер
файла превышал 64 Кб. В операционной системе разрешался рост этого файла сверх
64 Кб (без уведомления пользователя, что превышен этот предел), хотя любая запись,
выходящая за границу 64 Кб, игнорировалась. Если приложения добавляли
записи в верхние разделы файла win.ini, то информация внизу файла выталкивалась
за границу инициализации, и эта информация не реализовалась. Приложения,
которым требовались эти потерянные записи инициализации, переставали работать
полностью или утрачивали определенные функции. Пытаясь воспрепятствовать
этой проблеме, Microsoft рекомендовала разработчикам приложений сохранять
информацию приложений в частных .ini-файлах, которые бы относились только к
их приложению. Хотя это помогло, большинство разработчиков приложений продолжали
размещать большое количество информации в файле win.ini.
Файл system.ini использовался как основное хранилище системной информации
об оборудовании, установленном на компьютере, чтобы указывать операционной
системе на оборудование и связанные с ним программные компоненты (драйверы
устройств, оболочки и т.д.).
Файл progman.ini содержал настройки инициализации для Windows Program
Manager, и файл winfile.ini содержал настройки инициализации для Windows File
Manager. Отсутствие этих файлов не препятствовало работе Windows (в отличие от
файлов system.ini и win.ini), но загружалась конфигурация по умолчанию для приложений,
которыми они управляли, без каких-либо настроек, внесенных пользователем.
Файл protocol.ini, который впервые появился для версии Windows for Workgroups
в Windows 3.1x, содержал информацию инициализации для сетевой работы в Windows.
Частные файлы инициализации были .ini-файлами, которые добавлялись в каталог
Windows приложениями от сторонних фирм, которые устанавливались на компьютере.
Эти файлы содержали конкретную информацию о состоянии приложения,
включая такие элементы, как положение на экране, список недавно
использовавшихся файлов и т.д.
Файл win.ini до сих пор существует в большинстве систем Windows NT/ 2000/
Server 2003, и его роль состоит в поддержке 16-битных приложений.
И последним файлом, который использовался системой Windows 3.1x для конфигурации
системы, был файл reg.dat. Это была база данных регистрации Windows
3.1 Registration Database, которая являлась непосредственным предшественником
реестра. (Прошло не слишком много времени, и пользователи сократили Registration
Database до registry.) Эта база данных с вложенными структурами, начиная от единственного
корня ( HKEY_CLASSES_ROOT ), содержала информацию, связанную с
расширениями имен файлов, а также поддержку OLE (Object Linking and Embedding)
для функции drag-and-drop. В отличие от .ini-файлов, которые являлись простыми
текстовыми файлами ASCII, и которые можно было редактировать в любом текстовом
редакторе, файл reg.dat был двоичным файлом и поставлялся со своей собственной
программой редактирования, Registration Information Editor (Regedit.exe). Этот
первый реестр имел некоторые серьезные ограничения в виде единственной иерархической
структуры и предельного размера в 64 Кб файла reg.dat.
Большой проблемой реестра Windows 3.1 было то, как он использовался или,
скорее, не использовался этой операционной системой. Не было особого смысла в
аккуратной поддержке этой базы данных регистрации на уровне текущих изменений.
Приложения могли вносить в него записи, а могли и не вносить. В операционную
систему не было встроено никаких стандартов, чтобы приложения записывали
в реестр те же данные, что и в собственные .ini-файлы или в системные .ini-файлы.
Если конфигурация программного обеспечения, .ini-файлы и база данных регистрации
имели одинаковую информацию, это часто бывало просто совпадением. Кроме
того, методы связи, использовавшиеся для запроса и записи в реестр, были сложны
и требовали больших дополнительных затрат ресурсов, что часто замедляло работу
компьютера. И, наконец, настроек отдельного пользователя не существовало, поэтому
пользователи одного компьютера получали настройки, оставленные последним
работавшим пользователем.
Когда Microsoft выпустила первый вариант Windows NT (NT 3.1), реестр стал
намного более гибким и мощным. Ограничение в 64 Кб было снято. Иерархическая
структура была расширена, включив несколько контейнеров с вложенными уровнями,
а код управления реестром был переработан, чтобы поддерживать достаточно
высокую производительность. Было реализовано дистанционное администрирование,
что упростило жизнь сетевого администратора. Microsoft заставила
разработчиков использовать реестр для переменных и значений и даже ее собственные
программы стали поддерживать реестр.
На самом деле .ini-файлы продолжают играть определенную роль в самых новых
версиях Windows. Запустите поиск .ini-файлов на вашем компьютере Windows Server
2003, и вы найдете очень много таких .ini-файлов. После задания ролей компьютера,
но перед установкой каких-либо приложений поиск .ini-файлов на моем компьютере
Windows Server 2003 дал 228 .ini-файлов.Правила Microsoft для разработчиков включают указание, что любая программа
должна записывать свои установочные настройки в раздел HKEY_LOCAL_MACHINE\Software\Имя_поставщика и все пользовательские настройки
в HKEY_CURRENT_USER\Software\Имя_поставщика. Слишком многие
компании, разрабатывающие ПО, игнорируют это правило или не выполняют его
должным образом. Некоторые приложения создают подразделы, но не заполняют
их данными. Некоторые приложения пишут данные реестра, которые очевидным
образом нарушают это правило, например, регистрируя информацию командной
строки, которая указывает на .ini-файл вместо исполняемого файла программы.
Еще одним существенным изменением в выпуске Windows NT 3.1 было появление
Regedt32. Этот новый 32-битный редактор реестра выводил каждое поддерево в
его собственном окне и содержал новые мощные команды, позволяющие, например,
подсоединяться к реестру на удаленном компьютере, а также защищать разделы
реестра.
Windows NT 4 и Windows 95 (а позже Windows 98) были выпущены с почти одинаковыми
реестрами. В обоих случаях были добавлены два новых поддерева: HKEY_CURRENT_CONFIG и HKEY_DYN_DATA.
Все эти изменения привели нас к реестру Windows Server 2003 (а также Windows
2000), который является темой этой лекции.
Структура реестра
Реестр – это иерархическая база данных, содержащая вложенные контейнеры и данные
следующего типа.
Поддеревья (Subtree). Корни, или основные группы этой иерархии.
Разделы (Key). Основные контейнеры, находящиеся непосредственно в поддеревьях.
Подразделы (Subkey). Дочерние подразделы. Подразделы могут содержать вложенные подразделы или записи.
Записи (Entry). Реальные данные (значения), которые влияют на систему. Записи представлены в правой панели редактора реестра.
Примечание. Обозначение HKEY происходит от HandleToKey (указатель к разделу).
Ульи и файлы ульев
Физически реестр – это набор файлов, которые называются ульями. Улей (hive) –
это определенная часть реестра (определенный набор разделов, подразделов и параметров),
которая представлена файлом на вашем компьютере. Файлы ульев можно
просматривать или редактировать только с помощью редактора реестра. Однако
их можно копировать, что является способом их резервного копирования вручную.
(Большинство программ резервного копирования, включая соответствующую встроенную
программу в Windows Server 2003, позволяют выполнять резервное копирование
реестра.)
Файлы ульев реестра сохраняются в виде .dat-файлов, и для каждого из этих
файлов имеется соответствующий .log-файл, который действует как журнал транзакций
для основного .dat-файла. Добавление .log-файла к .dat-файлу используется
как средство отказоустойчивости. В случае изменений, когда требуется обновить
файл определенного улья, эти изменения сначала вносятся в .log-файл, который
действует как файл транзакций. (Если вы знакомы с Microsoft Exchange Server или
общим подходом к использованию базы данных/файла транзакций Jet, то здесь используется
тот же принцип.)
При обновлении .log-файла транзакции записываются на диск, и затем происходит
обновление файла улья с диска. Запись на диск является принудительной; это
не тот случай, когда "изменения помещаются в кэш, а их запись происходит, когда
на это есть время". При отказе компьютера до обновления файла улья можно выполнить
"откат" транзакций .log-файла, чтобы вернуться к предыдущим настройкам.
В самом реестре ведется запись для файлов ульев в списке HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Hive. Просматривая
этот список, вы увидите пару интересных элементов.
Во-первых, здесь имеется запись для раздела Hardware, но в панели данных нет
ни одного файла улья. Дело в том, что раздел Hardware формируется целиком во
время загрузки. Файл ntdetect.com собирает информацию, необходимую для заполнения
этого раздела, и операционная система не считывает эту информацию из какого-либо
файла улья.
Второй интересный момент – это путь к файлу: \Device\HarddiskVolume1\Windows\System32\Config\<имя_файла>
(вместо файлов настроек выполнившего
вход пользователя, которые находятся в подпапках \Device\HarddiskVolume1\Documents and Settings). Если вы не используете Windows как "цель" для своей установки
Windows Server 2003, то происходит подстановка использованного вами имени
папки (на протяжении всего этого курса я использую для обозначения этой папки %SystemRoot% ). Этот формат позволяет понять, в какой момент Windows выполняет
доступ к этой информации во время загрузки операционной системы. Операционная
система не может читать или назначать буквы-обозначения дисков, пока не
войдет в процесс запуска, то есть это единственный способ, посредством которого
Windows может найти соответствующее местоположение.
В таблице 4.1 показано местоположение файлов ульев (а также их содержимое)
на вашем компьютере Windows Server 2003.
Местоположение и содержимое файлов ульев на компьютере Windows Server 2003
| Улей реестра |
Файл на диске |
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\System |
%SystemRoot%\System32\Config\System |
HKEY_CURRENT_CONFIG |
%SystemRoot%\System32\Config\System |
HKEY_CURRENT_USER |
%SystemDrive%\Documents and Settings\< имя_пользователя >\Ntuser.dat |
HKEY_USERS\.Default |
%SystemDrive%\Documents and Settings\Default User\Ntuser.dat |
Элементы данных реестра
Элементы данных реестра находятся на нижнем уровне иерархии реестра. Они содержат
данные, которые определяют поведение разделов и подразделов (хотя не все
разделы и подразделы содержат записи данных). Записи представлены в правой
панели редактора реестра.
Любая запись содержит три элемента.
Имя (параметр).
Тип данных.
Значение данных.
Имя записи
Имя записи это почти всегда (но не всегда) одно слово, даже если фактически это
составное имя. Например, AutoRepeatRate – это имя записи в подразделе Keyboard
Response. Во время редактирования реестра вы можете добавлять новые записи и
присваивать им имя, однако это имя не должно быть произвольным. Имена должны
быть известны операционной системе или приложению, которое использует данную
запись, и вы должны знать это имя, прежде чем добавлять запись.
Типы данных записи
Каждая запись имеет тип данных, которые может хранить эта запись. Существуют
десять типов данных, но некоторые из них не используются системой Windows Server
2003. В следующих разделах описываются типы данных, которые могут вам встретиться.
REG_DWORD. Это двойное слово – два 16-битных слова, образующих 32-битное значение.
Это наиболее распространенный тип данных в реестре, и он используется
для разнообразных записей. Вы можете встретить записи с информацией о драйвере
устройства, булевыми значениями, такие величины, как количество секунд, которое
должно пройти, прежде чем что-то произойдет или не произойдет, и другую
информацию.
В редакторе Regedit записи типа REG_DWORD выводятся в шестнадцатеричном
формате, но вы можете переходить в десятичный или двоичный формат (в зависимости
от вида записи), если хотите выполнить редактирование. Я не могу выполнять
в уме преобразование шестнадцатеричных значений в другие системы
счисления, поэтому при необходимости изменения какой-либо величины, например,
периода тайм-аута, я должен изменить формат представления, чтобы выполнить
свою задачу. Если вы можете выполнять такие преобразования в уме, то сможете
работать быстрее.
REG_BINARY. Этот тип данных используется в записях с необработанными двоичными
данными. "Необработанные" означает, что нет никаких терминаторов, кроме
самих двоичных данных. Этот тип данных обычно используется для информации о
компонентах оборудования. Эти данные можно выводить и редактировать в двоичном
или шестнадцатеричном формате в Regedit.
REG_SZ - это тип данных для текстовых строк фиксированной длины. Большинство
записей, где используется этот тип, содержит булевы значения или короткие текстовые
строки. Это очень распространенный тип данных, видимо, используемый
почти так же часто, как и тип REG_DWORD.
Обозначение SZ означает String/Zero, поскольку в конце строки ставится нулевой
байт. Regedit не показывает конечный нуль, поэтому вы можете не помнить об
этом (за исключением ситуации, когда вы пишете программу, работающую с реестром,
и тогда вы должны учитывать этот конечный байт).
В случае просмотра или редактирования записи этого типа в Regedit открывающееся
окно озаглавлено "String Editor" (Редактор строк).
REG_MULTI_SZ. Этот тип данных используется в записях данных, содержащих несколько
текстовых строк. Строки разделяются запятыми или пробелами, и запись
заканчивается двумя нуль-символами (которые не видны в редакторе реестра). В
окне редактирования Regedit видны двоичные данные (хотя вы можете видеть текст
в правой части этого окна).
Когда приложения ищут какую-либо запись типа REG_MULTI_SZ, им отправляется
вся запись; они не могут запрашивать конкретную строку (что важно знать,
если вы программист).
REG_EXPAND_SZ. Этот тип используется, когда в запись включаются одна или несколько
переменных, значения которых должны быть подставлены какой-либо службой
операционной системы или приложением. Это те же переменные, которые вы
используете в пакетных файлах и скриптах (например, %SystemRoot% или
%UserName%). Я так и не смог определить, почему сам реестр не может присваивать
значение такой переменной и передавать его запрашивающей службе или программе,
– ведь реестру известно, где искать эту информацию.
REG_FULL_RESOURCE_DESCRIPTOR. Этот тип записи используется для хранения списка
ресурсов для компонентов оборудования. Его содержимое представлено матрицей,
объединяющей ресурсы для определенного компонента (или драйвера). Regedit выводит
эту информацию в двоичном формате.
REG_LINK. Этот тип данных содержит символическую ссылку между данными и
каким-либо значением в реестре. Например, если приложению требуется знать уникальный
идентификатор пользователя (для информации о настройках), то оно может
искать идентификатор безопасности (security ID) текущего пользователя
( HKEY_CURRENT_USER ).
REG_DWORD_LITTLE_ENDIAN. Этот тип записи аналогичен типу записи REG_DWORD.
Он чаще всего используется для хранения чисел. Значение данных – это 32-битное
число, в котором наиболее значащий байт выводится на экран как старший (левый)
байт. Этот тип записи имеется только в Windows Server 2003, Windows 2000 и Windows
98. Технически он присутствует в Windows NT, но реестр Windows NT автоматически
преобразует данные, записанные в REG_DWORD_LITTLE_ENDIAN, в стандартный
тип REG_DWORD.
REG_DWORD_BIG_ENDIAN. Этот тип записи противоположен типу REG_DWORD_LITTLE_ENDIAN. Наиболее значащий байт выводится на экран
как младший (правый) байт, и это используется платформами, где байты следуют
именно в этом порядке (PowerPC и Alpha). Поскольку Windows Server 2003 не поддерживает
эти платформы, любые оставшиеся элементы реестра этого типа игнорируются.
HKEY_CLASSES_ROOT
HKEY_CLASSES_ROOT заполняется всеми видами базовой информации. У вас
редко будет повод работать интерактивно в этом поддереве; это набор "строительных
блоков", с помощью которых могут работать операционная система и приложения.
В этом поддереве существуют два типа данных.
Информация, ассоциируемая с типами файлов.
Данные конфигурации для объектов COM.
Регистрация классов на уровне пользователя
Наиболее интересными в этом поддереве являются изменения, появившиеся в
Windows 2000. Это поддерево является алиасом (псевдонимом), и его источником в
Windows NT было поддерево HKEY_LOCAL_MACHINE\Software\Classes. В Windows
Server 2003/2000 это поддерево остается алиасом, но его данные извлекаются из двух
источников.
HKEY_LOCAL_MACHINE\Software\Classes.
HKEY_CURRENT_USER\Software\Classes.
Последний из этих разделов реестра не существовал в его нынешней конфигурации
до Windows 2000. (Хотя такой раздел имеется в Windows 98, его содержимое
отличается от одноименного раздела в Windows Server 2003/2000. В Windows 98 этот
раздел содержит идентификаторы класса [ CLSID ] для используемых по умолчанию
значков рабочего стола ОС.)
Этот новый источник на уровне пользователя для HKEY_CLASSES_ROOT в
Microsoft назвали регистрацией классов на уровне пользователя (per-user class
registration). Это означает, что на компьютерах с несколькими пользователями может
содержаться различная информация о классах, которая регистрируется при установке
ПО каждым конкретным пользователем. Информация на уровне отдельного
пользователя может включать любое количество изменений в регистрации
классов, что приводит к созданию нескольких наборов уникальных записей для ПО,
которое устанавливается на данном компьютере.
Регистрация классов на уровне пользователя полезна для перемещающихся
(блуждающих) пользователей (на многих предприятиях разделяемое использование
компьютеров происходит реже, чем их использование перемещающимися пользователями).
Независимо от компьютера, на котором выполняет вход пользователь,
все идентификаторы классов, соответствия для типов файлов и другие связи с программным
обеспечением из реестра не изменяются, поскольку информация о регистрации
классов перемещается вместе с данным пользователем. Однако это средство
используется, только если вы используете возможности IntelliMirror для
создания профилей перемещающихся пользователей, поскольку операционная система
загружает информацию регистрации классов после загрузки базового профиля
пользователя, используя расширения IntelliMirror (информация регистрации
классов записывается в локальную часть профиля во время процесса входа).
Вы не можете выполнять запись в реестр для использования регистрации классов
на уровне пользователя; это задача программирования. Инструкции и средства
для записи в разделы на уровне пользователей содержатся в комплектах разработки
для программистов.
Данные HKEY_CLASSES_ROOT
Элементы данных в поддереве HKEY_CLASSES_ROOT снабжают операционную
систему информацией об устанавливаемых объектах. Просматривая это поддерево,
вы увидите два набора разделов, организованных в алфавитном порядке.
Первый набор разделов, содержащий все возможные расширения имен файлов
от * до z*.
Второй набор разделов – это идентификаторы программ и объектов.
Соответствия для типов файлов. Хотя термин "соответствия для типов файлов" (file
associations) использовался еще в Windows 3.1, современная реализация поддерева HKEY_CLASSES_ROOT стала намного больше как по размерам, так и функциям.
Подразделы, которые имеются для любого конкретного расширения имен файлов,
содержат информацию, которая используется для процессов COM, VB, автоматизации
и сценарных процессов. В панели данных для раздела расширения обычно
указывается тип файлов, соответствующий данному расширению имен. например,
раздел .avi содержит элемент данных типа REG_SZ с именем Content Type и значением
video/avi.

Для зарегистрированных типов файлов имеются подразделы, содержащие информацию,
которая используется системой при работе с этими типами файлов.
Например, подраздел с именем ShellNew указывает операционной системе, как создать
новый экземпляр файла этого типа. Некоторые разделы для расширений имеют
подразделы, связывающие данное расширение с одной или несколькими программами
(и каждый из этих подразделов имеет подраздел ShellNew).
Например, когда вы устанавливаете операционную систему, расширение .doc
автоматически регистрируется для WordPad.exe. Если выбрать подраздел .doc в HKEY_CLASSES_ROOT, то появится элемент данных Default со значением
WordPad.exe.Document.1. Если вы устанавливаете Microsoft Office, то в правой
панели появится второй элемент данных с именем Content Type и значением
application/msword. Дело в том, что процесс установки для Windows не перезаписывает
соответствие для WordPad; он сам добавляет второе соответствие. Не все программы
установки действуют таким образом, и вы можете встретить случаи, когда
при установке приложения происходит запись поверх предыдущих соответствий для
расширений имен файлов.
Если вам нужно изменить соответствие для расширений имен файлов, не используйте
реестр. Вместо этого используйте вкладку File Types (Типы файлов) диалогового
окна Folder Options (Свойства папки), которое можно вызвать из панели
управления или из меню Tools (Сервис) для системных папок. Вы можете добавлять
соответствия, если хотите ассоциировать несколько программ с одним расширением,
или можете изменить соответствие с одной программы на другую.

Идентификаторы объектов. Второй набор разделов в HKEY_CLASSES_ROOT – это
в основном идентификаторы программ и объектов вместе с некоторыми родительскими
разделами, которые поддерживают другие классы информации (например, CLSID ). Почти все эти разделы имеют подразделы, а количество и тип подразделов
зависит от объекта и типа информации об этом объекте, которая требуется операционной
системе. Для регистрируемых типов файлов часто используются один или
несколько следующих подразделов.
CLSID. Указывает уникальный идентификатор класса данного типа объектов.
DefaultIcon. Указывает файл, содержащий значок для этого типа файлов. Обычно это файл с расширением .exe или .dll. Обычно эти данные имеют формат Путь,x (где x – это целый идентификатор для значка, содержащегося в этом файле). Большинство файлов, для которых имеются значки, имеют несколько значков, и соответствующие идентификаторы нумеруются, начиная с 0.
Protocol. Содержит информацию, которая требуется системе для связывания, встраивания и редактирования данного типа файлов.
Shell. Имеет подразделы, в которых содержится информация о типах операций, которые вы можете выполнять с данным типом файлов.
Вы можете видеть действие данных из подраздела Shell в окне Windows Explorer
или My Computer. Если щелкнуть правой кнопкой на файле с зарегистрированным
расширением и выбрать пункт Open (Открыть), то система обратится к подразделу
\Shell\Open\Command и выполнит команду, которая находится в этом элементе данных.
Если выбрать пункт Print, то система использует команду, которая находится в
подразделе \Shell\Print\Command.
HKEY_CURRENT_USER
HKEY_CURRENT_USER содержит профиль для текущего выполнившего вход
пользователя. Это алиас для HKEY_USERS\<идентификатор безопасности выполнившего
вход пользователя>. Это поддерево на самом деле не содержит никаких данных;
в нем хранится только указатель на содержимое реального поддерева и выводится
эта информация. Однако важно знать, что изменения, внесенные в содержимое
одного из поддеревьев, приводят к изменению обоих поддеревьев.
Это средство экономии времени для операционной системы и приложений, поскольку
они выполняют поиск настроек пользователя, прежде чем выполнять задачи.
Без поддерева-алиаса HKEY_CURRENT_USER приходилось бы направлять
поиск к нужным разделам SID (идентификаторов безопасности) в HKEY_USERS,
чтобы обеспечить использование подходящих настроек. Для этого требовался бы
предварительный поиск, чтобы определить SID текущего пользователя.
При входе пользователя HKEY_CURRENT_USER создается заново с использованием
данных, которые составляют профиль выполняющего вход пользователя.
Если это первый вход данного пользователя, то никакого профиля еще нет, и операционная
система загружает настройки профиля Default User. При завершении
сеанса этого нового пользователя его профиль сохраняется под именем этого пользователя.
Сохраняются любые изменения, внесенные в конфигурацию этим пользователем.
Профили пользователей
Профили пользователей содержат настройки каждого пользователя, включая настройки
операционной системы, настройки приложений и политики. Эти настройки содержатся
в файле NTUSER.DAT, который содержится в подпапке каждого пользователя
( %SystemDrive%\Documents and Settings\<Имя-текущего-пользователя> ).
Процесс создания профиля для каждого пользователя начинается с загрузки
копии профиля Default User. Файл NTUSER.DAT в %SystemDrive%\Documents and
Settings\Default User содержит настройки конфигурации для пользователя по умолчанию,
которые хранятся в реестре в HKEY_USERS\.DEFAULT. Для профиля каждого
пользователя используются также общие программные группы, которые находятся
в %SystemDrive%\Documents and Settings\All Users.
Соглашения по созданию папок профилей пользователей (включая профиль
Default User и профиль All Users) в Windows Server 2003 отличаются от соглашений,
используемых в Windows NT 4.0.
При "чистой" установке Windows Server 2003 или при модернизации поверх Windows 2000/9.x папка для профилей пользователей создается на том же диске, что и для установки Windows 2000, а именно, в %SystemDrive%:\Documents and Settings.
В случае модернизации к Windows Server 2003 поверх Windows NT папки для профилей остаются в том же месте, что и в Windows NT, а именно, в %SystemRoot%\Profiles.
Примечание. Путь к профилю пользователя обычно представлен переменной
%ProfilePath%, а имя папки для пользователя создается из идентификатора этого
пользователя.
Файл NTUSER.DAT содержит включаемую в реестр часть профиля для выполнившего
вход пользователя (обычно в HKEY_CURRENT_USER ), и она загружается
в реестр во время входа пользователя. В соответствующей подпапке профиля содержатся
подпапки с дополнительными настройками.

Примечание. В дополнение к локальным профилям в Windows Server 2003, как и в
Windows 2000/NT, поддерживаются два дополнительных типа профилей: перемещаемые
(roaming) и обязательные (mandatory). Более подробные сведения о профилях
пользователей см. в лекции 12 курса "Внедрение, управление и поддержка сетевой инфраструктуры MS Windows Server 2003".
Данные HKEY_CURRENT_USER
Настройки среды текущего выполнившего вход пользователя содержатся во вложенной
иерархии подразделов. Почти все настройки конфигурации, которые находятся
здесь, можно изменять в графическом интерфейсе, а не интерактивно в самом
реестре.

AppEvents. Традиционно, начиная с Windows 9x, Microsoft выделяет целиком
отдельный раздел реестра, чтобы включать в него звуки для событий. Этот раздел содержит
два подраздела.
EventLabels. Группа подразделов с именами, которые фактически являются метками для типов событий. Элемент данных в каждом подразделе содержит описание соответствующей метки (и часто описание совпадает с самой меткой).
Schemes. Содержит дополнительные подразделы, в которых находятся разнообразные настройки, включая фактические имена звуковых файлов, связанных с событиями.
Пользователи связывают звуковые файлы с событиями в апплете Панели управления
Sounds And Audio Devices (Звук и аудиоустройства). Кроме того, схемы,
звуковые файлы и описания событий добавляют некоторые приложения (например,
небольшая мелодия, обозначающая поступление новой почты в Eudora).
Console. Раздел Console содержит настройки для подсистемы консоли Windows Server
2003, под управлением которой работают все приложения, выполняемые в текстовом режиме (включая Command Processor, который используется вами для работы в
командной строке). Информацию по заданию настроек конфигурации для окна
командной строки см. в лекции 7.
Control Panel. Этот раздел и его подразделы содержат настройки, которые управляют
внешним видом рабочего стола, вместе с определяемыми пользователем опциями
для многих апплетов, вызываемых из панели управления.
При раскрытии этого раздела появляются имена подразделов, соответствующие
некоторым апплетам, вместе с рядом других категорий настроек. Значения этих
элементов данных изменяются, когда пользователи вносят изменения в опции апплетов
панели управления. Большинство этих опций действуют сразу, без необходимости
перезагрузки операционной системы.
Не поддавайтесь мнению, что поскольку эти настройки обычно влияют только
на пользовательский интерфейс, они "безвредны". Администраторы, которые верят
этому и предоставляют пользователям полную свободу в изменении настроек
по умолчанию, часто раскаиваются в своем решении. Некоторые из настроек раздела
Control Panel и его подразделов оказывают большее влияние, чем это кажется.
Например, если неопытный пользователь существенно изменит видеонастройки,
это может привести к тому, что компьютер не сможет загружаться обычным образом.
Защищенная паролем экранная заставка (Screen Saver) может быть важна для
клиентской машины, на экране которой могут выводиться важные данные, и если
кого-то раздражает это средство, он может отключить его и уйти на обед, оставив
записи платежной ведомости на экране монитора. А тут еще всякие истории о
пользователях, которые защищают паролем экранную заставку, не записав или не запомнив
пароль, что вынуждает их обращаться в службу поддержки.
В Windows Server 2003 имеется обширный набор групповых политик, управляющих
доступом к апплетам панели управления (конкретную информацию см. в
лекции 13 курса "Внедрение, управление и поддержка сетевой инфраструктуры MS Windows Server 2003").
Environment. Этот раздел содержит записи данных, представляющие значения
переменных среды для выполнившего вход пользователя.

Включены переменные среды Temp и Tmp, поскольку приложения могут использовать
любую из этих переменных.
Вместо использования редактора реестра для работы с этими настройками вы
можете просматривать и изменять их в диалоговом окне System Properties (щелкните
правой кнопкой на My Computer и выберите пункт Properties). Во вкладке Advanced
(Дополнительно) щелкните на кнопке Environment Variables (Переменные среды),
чтобы увидеть информацию, аналогичную рисунку 4.1.
(рис 4.1) Настройки среды пользователя можно добавить в диалоговом окне System PropertiesЕсли вносятся изменения в настройки среды (через реестр или в диалоговом
окне System Properties), то новые настройки начинают действовать только при следующем
входе пользователя.
Внимание. Элементы данных в разделе Environment должны иметь тип данных
REG_SZ. Если ввести элемент другого типа или изменить существующий тип данных,
то система не будет заменять переменную ее значением.
Identities. Это раздел, отсутствовавший в предыдущих версиях Windows, не документирован
Microsoft. Это, видимо, какой-либо идентификатор для текущего пользователя,
но не основной идентификатор. В HKEY_USERS каждый пользователь имеет
уникальный идентификатор. Раздел уникального идентификатора текущего пользователя
имеет подраздел, значение которого совпадает со значением этого элемента
данных.
Keyboard Layout. В этом разделе хранится информация об установленных раскладках
клавиатуры, включая настройки устройств и драйверов. Кроме того, если пользователь
добавляет другие клавиатуры (файлы языков клавиатур), то информация об
этих клавиатурах содержится в подразделах.
Изменения по устройствам и драйверам следует вносить в апплете панели управления
Keyboard. Дополнительные клавиатуры добавляются в апплете Regional and
Language Options (Региональные стандарты и язык).
Network. Этот раздел существует, только если текущий пользователь имеет отображенные
сетевые диски. Сам этот раздел является родительским разделом и не содержит
существенных данных. Для каждого постоянного отображаемого диска имеется
дочерний подраздел, именем которого является буква-обозначение
отображаемого сетевого диска.

Если пользователь отображает какой-либо диск и не выбирает опцию Reconnect
At Logon (Снова подсоединяться при входе), то отображаемый диск не записывается
в реестр. (Все текущие отображаемые диски независимо от их постоянства имеют
значки в My Computer.)
Примечание. По умолчанию состояние опции Reconnect At Logon определяется тем,
что было выбрано на тот момент, когда пользователь отображал диск.
Каждый подраздел содержит информацию о соединении.
ConnectionType. Указывает тип соединения для данного отображения. Значение 1 указывает перенаправление диска; значение 2 указывает перенаправление принтера.
.)
ProviderName. Указывает сетевого провайдера, который создает это соединение. По умолчанию задано значение Microsoft Windows Networks (которое можно интерпретировать как Microsoft LanMan).
ProviderType. Указывает провайдера, используемого для соединения. Значение – это константа, заданная Microsoft. Для Microsoft LanMan эта константа равна 0x20000 (откройте этот элемент данных, чтобы увидеть данные в шестнадцатеричном формате). В случае сторонних провайдеров эта константа назначается данным провайдером.
RemotePath. UNC-путь к данному отображаемому разделяемому ресурсу.
UserName. Указывает пользовательское имя, которое будет использоваться для соединения. По умолчанию этот элемент данных не содержит значения, так как почти все время это выполнивший вход пользователь. Но если в конфигурации отображения указывается другое пользовательское имя для подсоединения к данному отображаемому диску, то оно представлено как значение в этом элементе данных. (В мастере отображения сетевого диска Map Network Drive Wizard имеется опция Connect Using A Different User Name [Подсоединяться с помощью другого пользовательского имени], с помощью которой можно задавать пользовательское имя и пароль для конфигурируемого соединения.)
Printers. Этот подраздел содержит информацию о принтерах, установленных на
данном компьютере, включая заданные пользователем параметры конфигурации.
Session Information. Этот подраздел, видимо, содержит информацию о приложениях,
используемых в текущем сеансе (единственный элемент данных в моем реестре – это
ProgramCount, значение которого равно количеству открытых на данный момент программ).
Я использовал слово "видимо", поскольку этот подраздел не документирован.
В группе по документированию реестра Windows мне сообщили, что они не документировали
этот раздел, но планируют сделать это в будущей версии Windows.
Software. В этом разделе хранятся пользовательские настройки приложений и программные
переменные, относящиеся к выполнившему вход пользователю. При внесении
изменений в конфигурацию пользователями эти элементы данных изменяются.
Подразделы этого раздела создаются не только программами установки ПО,
– здесь также хранятся все виды важных настроек операционной системы. Подробное
описание этих настроек выходит за рамки изложения данного курса.
UNICODE Program Groups. Этот раздел включен для совместимости с прежними версиями
– для пользователей, которые использовали Program Manager. Элементы данных,
если они имеются, определяют содержимое все личных программных групп в
Program Manager.
Volatile Environment. Этот раздел содержит настройки для сеанса текущего
пользователя.
HKEY_LOCAL_MACHINE
Это поддерево содержит информацию о компьютере, его оборудовании, установленных
драйверах устройств и опциях конфигурации (для настроек безопасности и
настроек ПО), которые влияют на всех пользователей данного компьютера. Оно
содержит пять разделов: Hardware, SAM, Security, Software и System. Все эти разделы,
кроме Hardware, присутствуют на диске в виде файлов ульев.
HKLM\Hardware
Ntdetect.com ("распознаватель оборудования" Windows Server 2003) создает весь этот
раздел во время загрузки. Эта информация содержится в RAM-памяти (вы можете
интерпретировать этот раздел как содержащийся в памяти файл улья), что позволяет
Windows находить информацию о данной машине во время загрузки операционной
системы. В иерархической структуре подразделов содержится информация обо
всех компонентах оборудования компьютера.
HKLM\SAM
Это данные, используемые для диспетчера учетных записей Security Accounts Manager
(SAM), недоступны через редакторы реестра. Улей SAM, находящийся по умолчанию
в %SystemRoot%\System32\Config является хранилищем таких данных для
пользователей и групп. В данные SAM включены все локальные пользователи и группы,
в том числе полномочия доступа пользователей к папкам, файлам и периферийному
оборудованию. Большое количество данных о группах и пользователях
домена, которые содержались в улье SAM реестра Windows NT 4, содержатся теперь
в Active Directory системы Windows Server 2003 (и Windows 2000).
HKLM\Security
Аналогично подразделу SAM данные подраздела Security содержатся в соответствующем
улье. Пользователи не могут просматривать или изменять эти данные интерактивно
в редакторе реестра. Улей Security находится в том же месте на жестком
диске, что и улей SAM.
Содержимое улья Security относится к средствам безопасности, и его данные
зависят от того, что вы еще работаете (или уже не работаете) в смешанном режиме.
Если серверы Windows NT все еще участвуют в аутентификации, то улей Security
содержит настройки конфигурации для пользовательских и групповых политик NT
4 в дополнение к политикам безопасности Windows Server 2003/Windows 2000.
HKLM\Software
Это обширный раздел, содержащий несколько уровней подразделов в виде иерархической
структуры. Компании-разработчики ПО обычно добавляют свой раздел в
это поддерево (и обычно добавляют тот же раздел в HKEY_CURRENT_USER\Software )
с подразделами для имени, версии и других компонентов продукта.
Операционная система хранит здесь настройки компьютера, включая настройки,
которые определяются групповыми политиками.
HKLM\System
Это огромный раздел! Многие из его подразделов и элементов данных управляют
загрузкой операционной системы (см. лекцию 5); другие подразделы и элементы данных
управляют почти всем, что делает операционная система (особенно службы ядра).
Это определяющий раздел для настроек конфигурации компьютера, но подробное
описание этого раздела выходит за рамки изложения данного курса.
HKEY_USERS
Это поддерево содержит подразделы для профиля Default User и всех известных
профилей пользователей для данного компьютера. Каждый подраздел с профилем
отдельного пользователя идентифицируется идентификатором безопасности
(Security ID, SID) и раскрывается в виде полного набора подразделов с настройками
(для раздела HKEY_CURRENT_USER, когда данный пользователь выполняет
вход).
HKEY_CURRENT_CONFIG
Это поддерево содержит информацию о профиле оборудования, который используется
данным компьютером при загрузке. Это алиас для HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profile\Current.
Regedit.exe
Regedit.exe – это единственный редактор реестра в Windows Server 2003; regedt32 уже
не используется. (Если открыть Start\Run и ввести regedt32, то откроется Regedit.exe.)
Большинство из тех, кто часто работает с реестром, всегда предпочитали интерфейс
Regedit.exe и использовали regedt32 только для задания настроек безопасности. Теперь
настройки безопасности доступны и в Regedit.exe, то есть фактически мы не
потеряли regedt32.
Как заставить Regedit не отображать последний из использовавшихся разделов
Одной из неприятных (для меня) особенностей Regedit в Windows Server 2003 (и в
Windows 2000) является то, что при открытии этого редактора появляется последний
из использовавшихся вами разделов. Иногда это раздел, находящийся далеко
внизу дерева, и требуется много работы, чтобы выполнить прокрутку, закрытие разделов
и прочие операции в левой панели для перехода к разделу, который вы хотите
использовать на этот раз. Чтобы изменить это поведение, вы должны выполнить
две задачи.
Удалить информацию о последнем из использовавшихся вами разделов.
Указать системе, чтобы она не записывала эту информацию при вашем следующем доступе к какому-либо разделу.
Чтобы выполнить эти задачи, выполните следующие шаги.
Перейдите в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ Applets\Regedit.
Дважды щелкните в правой панели на элементе данных LastKey и удалите значение, создав пустую строку.
Щелкните на кнопке OK, чтобы закрыть String Editor.
Снова щелкните правой кнопкой на разделе Regedit в левой панели и выберите в контекстном меню пункт Permissions (Полномочия).
Щелкните на кнопке Advanced, чтобы открыть диалоговое окно Advanced Security Settings (Дополнительные настройки безопасности).
Выберите свое пользовательское имя и щелкните на кнопке Edit, чтобы открыть диалоговое окно Permission Entry (Ввод полномочий).
Выберите опцию Deny (Запретить) для полномочий Set Value (Задание значения).
Выберите этот новый элемент Deny<ваша-пользовательская-учетная-запись> и щелкните на кнопке Edit. Затем выберите в раскрывающемся списке Apply Only (Применять только) вариант This Key Only (Только этот раздел). (Это ограничит запрет полномочий Set Value только подразделом Regedit, и не будет влиять на подраздел Favorites.)
Щелкните на кнопке OK три раза, чтобы закрыть диалоговое окно Permissions (после второго щелчка на кнопке OK вам нужно будет подтвердить тот факт, что вы внесли эти изменения).
Раздел Regedit не существует, если вы еще не запускали Regedit на данном компьютере.
Если этого раздела нет, не добавляйте его в реестр вручную. Вместо этого
откройте и закройте Regedit, чтобы создать этот раздел, и затем снова откройте
Regedit, чтобы выполнить указанные шаги.
Если вы не хотите выполнять все эти шаги, то можете закрывать все разделы
вручную, удерживая клавишу Shift и непрерывно нажимая клавишу "левая стрелка",
пока не произойдет сжатие всей иерархической структуры. Лично я считаю это
мучительным занятием.
Дистанционный доступ к реестрам
Вы можете использовать Regedit для поиска и управления в реестре другого компьютера
в вашей сети. Выберите File\Connect Network Registry (Подсоединиться к реестру
в сети), чтобы открыть диалоговое окно Select Computer (Выбор компьютера).
Введите имя компьютера, к которому вы хотите подсоединиться, или щелкните на
кнопке Advanced для поиска этого компьютера.

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

Вы можете одновременно подсоединяться к нескольким удаленным реестрам, и
каждый набор поддеревьев идентифицируется именем компьютера.

Чтобы отсоединиться от реестра удаленного компьютера, выберите
File\Disconnect Network Registry (Отсоединить реестр в сети), щелкните на имени
соответствующего компьютера и щелкните на кнопке OK.
Примечание. Если вы забыли отсоединиться, то при закрытии Regedit произойдет
автоматическое отсоединение всех удаленных реестров.
Поиск в реестре
Regedit содержит эффективное средство поиска данных в реестре. Чаще всего я открываю
реестр для поиска данных после установки приложения. Кроме того, иногда
поиск в реестре – это единственный способ найти причину сообщения об ошибке,
где говорится об отсутствии какого-либо исполняемого файла во время загрузки.
Поиск в реестре выполняется "сверху вниз", а это означает, что поиск начинается
с точки, где вы находились перед запуском поиска. Если начать сверху (My Computer),
то поиск охватывает все поддеревья. Если у вас нет причины выполнять поиск информации
о классах, то лучше всего начинать с HKEY_CURRENT_USER или HKEY_LOCAL_MACHINE. Если у вас есть основания быть уверенным, что искомые
данные находятся в какой-либо конкретной части реестра, раскройте соответствующее
поддерево и начните поиск с соответствующего раздела или подраздела.
Вы можете открыть диалоговое окно Regedit Find, используя любое из следующих
действий.
Выбрать Edit\Find.
Нажать клавишу F3.
Нажать клавиши CTRL-F.
После начала поиска клавиша F3 используется уже для другой цели – поиск следующего
экземпляра искомой строки.
В диалоговом окне Find введите строку поиска и, если это имеет смысл, введите
конкретный тип данных. Затем щелкните на кнопке Find Next (Найти далее).

Если вы нашли нужную строку и этот экземпляр вам не подходит, щелкните на
кнопке F3, чтобы искать следующий экземпляр.
Примечание. Часто бывает трудно определить, чем является искомая строка:
разделом, элементом данных или значением. Приложения могут добавлять подразделы с
именами, которые, казалось бы, должны быть именами элементов данных.
Создание списка Favorites
Если имеются разделы реестра, которые вы часто посещаете для просмотра данных
или работы с ними, то можете сохранить эти разделы в списке Favorites (Избранное).
Чтобы добавить какой-либо раздел в свой список, выделите этот раздел и выберите
Favorites\Add to Favorites. Появится диалоговое окно Add to Favorites, чтобы
позволяет вам присвоить имя данному элементу. По умолчанию выводится имя раздела,
но вы можете уточнять название. Например, я добавил в свой список Favorites
подраздел HKCU\Software\Microsoft\Windows\CurrentVersion\Policies. В диалоговом
окне было представлено имя Policies, но поскольку имеется много подразделов с
этим именем, я изменил название, чтобы стало ясно, что это раздел, где содержатся
пользовательские политики.

Ваш список избранных разделов появится в меню Favorites. Чтобы сразу перейти
в какой-либо подраздел, щелкните на его имени в этом списке.
Чтобы удалить какую-либо запись из вашего списка Favorites, выберите
Favorites\Remove Favorites. В диалоговом окне Remove Favorites выберите запись,
которую хотите удалить, и щелкните на кнопке OK.

В отличие от списка Favorites в Internet Explorer вы не можете переименовать
запись. Вместо этого приходится удалить запись и добавить ее снова. Наиболее быстрый
способ – это щелкнуть на записи, чтобы перейти в соответствующий раздел,
удалить запись и затем выбрать Add to Favorites (вы находитесь в нужном разделе),
чтобы снова создать запись (введя на этот раз более осмысленное описательное имя).
Настройка и устранение проблем с помощью реестра
Иногда единственный способ устранения проблемы – это работа с реестром. Во
многих случаях это результат консультаций со службами поддержки Microsoft или
компании, разрабатывающей ПО, либо результат инструкций, которые вы нашли в
какой-либо статье Microsoft Knowledge Base. Вы можете добавлять, удалять или изменять
подразделы и элементы данных реестра.
Экспорт разделов
Прежде чем работать с данными реестра, всегда создавайте резервную копию подраздела,
в котором вы работаете, чтобы можно было восстановить прежние данные,
если ваши изменения неверны. Для этого выберите подраздел, с которым планируете
работать, и выберите File\Export. В диалоговом окне Export Registry File (Экспорт
файла реестра) задайте имя файла и выберите тип файла Registration File (*.reg).
Windows Server 2003 выбирает папку My Documents как место по умолчанию, но вы
можете сохранять этот файл где угодно.
Тип файла по умолчанию для экспорта – это файл регистрации, имеющий расширение
.reg. Файл регистрации содержит все данные выбранного раздела и его
подразделов. Например, при экспорте раздела HKCU\Network (содержащего подразделы
для двух отображаемых дисков моего компьютера) получается следующий
текст.
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Network]
[HKEY_CURRENT_USER\Network\Y]
"RemotePath"="\\\\Admin\\NET Server CR"
"UserName"=dword:00000000
"ProviderName"="Microsoft Windows Network"
"ProviderType"="dword:00020000"
"ConnectionType"=dword:00000001
"DeferFlags"=dword:00000004
[HKEY_CURRENT_USER\Network\Z]
"RemotePath"="\\\\Admin\\NETcomprefFigs"
"UserName"=dword:00000000
"ProviderName"="Microsoft Windows Network"
"ProviderType"="dword:00020000"
"ConnectionType"=dword:00000001
"DeferFlags"=dword:00000004
Результат действия по умолчанию для .reg-файла (при двойном щелчке на этом
файле) – это слияние, то есть запись содержимого этого файла в реестр (то же самое
происходит при выборе File\Import в линейке меню Regedit). На самом деле распространение
.reg-файла – это удобный способ внесения необходимых изменений
в реестр на нескольких компьютерах (см. ниже раздел "Использование файлов регистрации").
Но если вам нужен только просмотр содержимого .reg-файла, щелкните правой
кнопкой на этом файле и выберите пункт Edit, в результате чего этот файл откроется
в Notepad.
Примечание. Файлы регистрации – это текстовые файлы Unicode.
Если вы внесли изменения в какой-либо раздел, но затем решили отказаться от
них, то можете дважды щелкнуть на созданном .reg-файле, чтобы восстановить прежние
данные в этом разделе и его подразделах. Windows попросит вас подтвердить
ваши действия.
При слиянии .reg-файла с реестром все данные этого файла записываются в реестр.
Но если вы добавили новый подраздел или новый элемент данных в существующий
подраздел, то при слиянии новый элемент не будет удален. Windows не удаляет
текущее содержимое раздела, с которым вы работаете, прежде чем выполнить
слияние с данными .reg-файла. Если вы добавили что-либо в реестр и затем решили
вернуться к прежним данным, то должны вручную удалить новые объекты.
Примечание. Вы можете также сохранять файлы реестра в файлах другого типа: для
реестров в-9x/NT в виде двоичных файлов ульев или в виде текстовых файлов. Кроме
того, вы можете загружать или удалять (unload) файлы ульев. Подобные подробности
выходят за рамки изложения данного курса, но вы можете подробнее ознакомиться с
реестром в моей книге "Admin911: Windows 2000 Registry", изданной в McGraw-Hill/
Os-orne (2000). Почти все в этой книге применимо также к Windows Server 2003.
Добавление элементов в реестр
Работая в Regedit, вы можете добавлять разделы или элементы данных в реестр. В
большинстве случаев добавляемые пользователем элементы – это данные в каком-либо
подразделе, но иногда требуется добавить новый подраздел и наполнить его
элементами данных.
Для добавления подраздела сделайте следующее.
Щелкните правой кнопкой на родительском разделе и выберите New\Key (Создать\Раздел).
Задайте имя этого нового раздела (следуя инструкциям из документации или из службы поддержки).
Для добавления элемента данных сделайте следующее.
Щелкните правой кнопкой на его разделе-контейнере и выберите New\<Тип-значения> (вы должны знать нужный тип значения элемента данных, который добавляете в реестр).
Задайте имя этого элемента данных (следуя инструкциям из документации или из службы поддержки).
Дважды щелкните на этом элементе данных и введите подходящее значение.
Удаление элементов реестра
Вы можете удалить из реестра любой раздел или элемент данных, за исключением
поддеревьев. Щелкните правой кнопкой на элементе, который хотите удалить, и
выберите в контекстном меню пункт Delete. Windows попросит вас подтвердить ваши
действия. Удаление элемента реестра – это опасная операция, поэтому убедитесь в
правильности полученных инструкций и в точности следуйте этим инструкциям.
Изменение значений элементов реестра
Значения реестра могут иметь различный формат: текстовый, шестнадцатеричный,
десятичный и двоичный. Тип значения обычно (но не всегда) связан с типом элемента
данных. Вы можете изменить значение элемента данных, дважды щелкнув на этом
элементе в правой панели, чтобы открыть диалоговое окно его редактирования.
Использование файлов регистрации
Чаще всего .reg-файлы используются для восстановления раздела, который вы
экспортировали как резервную копию, прежде чем внести в него изменения. Это
достаточно несложный способ восстановления поврежденного пользователем реестра.
Приложения часто содержат .reg-файлы в своей группе файлов установки и используют
их для регистрации информации конфигурирования. Любой пользователь
может написать .reg-файл (этап написания не представляет сложностей; опасной
частью может оказаться результат пересылки этого файла в реестр).
Вы можете использовать .reg-файлы, чтобы поручать администрирование реестров
вашей системы. Ознакомившись с тем, как они действуют и что они делают,
вы можете использовать их для управления пользователями, настройками ПО, настройками
компьютеров или другими элементами, хранящимися в реестре.
Написание и использование .reg-файлов – это способ отправки изменений реестра
на один или несколько компьютеров вашей системы вместо открытия реестра
на каждом компьютере и внесения изменений интерактивным способом. Такие изменения
реестра очень эффективны и обычно используются в следующих обстоятельствах.
Вы хотите освободить определенные компьютеры и определенных пользователей от политик уровня домена, которые были к ним применены.
Вы хотите ограничить определенных пользователей, чтобы не позволять им использовать определенные средства.
Вы хотите предложить пользователям возможность внесения поправок в их системы.
Обладая возможностями групповых политик для своих компьютеров Windows
Server 2003, вы можете также использовать .reg-файлы, чтобы вносить изменения в
реестр для управления доступом и поведением пользователей на компьютерах с более
ранними версиями Windows.
Если вы пишете программы, то даже в случае написания кода только для внутреннего
использования (в отличие от крупных компаний по разработке ПО) вы можете
использовать .reg-файлы, чтобы конфигурировать реестр для своей программы.
Архитектура .reg-файла
Файлы регистрации – это текстовые файлы с расширением .reg, использующие
следующий формат.
Имя инструментального средства
пустая строка
[Путь в реестре]
"Имя элемента данных"=Тип данных:значение
"Имя элемента данных"=Тип данных:значение
"Имя элемента данных"=Тип данных:значение
Имя инструментального средства. Первая строка идентифицирует средство, которое
используется для выполнения этой процедуры.
Для Windows Server 2003/2000/XP: Windows Registry Editor Version 5.00.
Для всех версий Windows 9x/NT: REGEDIT4.
После этой строки следует пустая строка.
Путь в реестре. Путь в реестре к разделу, содержащему значения, которые вы
импортируете, заключается в прямоугольные скобки, причем каждый уровень в иерархии
отделяется обратным слэшем, например, [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\System].
У вас может быть несколько путей в файле регистрации.
Примечание. Если нижний уровень иерархии, которую вы вводите в .reg-файле,
отсутствует в текущем реестре, то вы создаете новый подраздел. Содержимое файлов
регистрации пересылается в реестр в порядке его ввода: если вы создаете новый
раздел и подраздел в этом разделе, вводите строки в соответствующем порядке.
Данные. Данные, которые вы пересылаете в реестр, вводятся в следующем виде:
"Имя элемента данных"=Тип элемента данных:Значение элемента данных
Имя элемента данных заключается в кавычки.
После элемента данных непосредственно следует знак равенства (=).
Тип элемента данных непосредственно следует после знака равенства и заканчивается символом двоеточие (:).
Значение элемента данных должно вводиться в подходящем формате (строчный, шестнадцатеричный, десятичный или двоичный).
Вы можете ввести несколько строк элементов данных для одного пути в реестре,
например:
"GroupPolicyRefreshTime"=dword:00000014
"GroupPolicyRefreshTimeOffset"=dword:0000000f
В этих двух строках представлены шестнадцатеричные значения для значений
данных: 00000014 – это шестнадцатеричный эквивалент 20, и 0000000f – это
шестнадцатеричный эквивалент 15. Если вы не очень хорошо разбираетесь в шестнадцатеричных
и других трудночитаемых данных, ограничьтесь при создании элементов
данных в своем .reg-файле элементами данных, которые содержат строки, либо
используют 0 и 1 для отключения и включения политики или какого-либо запрещения.
В реестре нет булева типа данных. Но вы можете пересылать булевы данные в
реестр, используя в .reg-файле элементы типа DWORD (4 байта) или STRING (2
байта), и при этом не обязательно вводить полную строку. Просто введите 1, и вы
увидите в реестре значение 0x00000001(1).
Слияние файла регистрации с реестром
Файлы регистрации используются путем слияния .reg-файла с реестром, осуществляемого
в Regedit. Имеется три способа пересылки содержимого этого файла в реестр.
Дважды щелкнуть на этом файле (действие по умолчанию для .reg-файла – это слияние).
Ввести Regedit <имя_файла>.reg в командной строке.
Выбрать File\Import в линейке меню Regedit.
Совет. Если вы хотите запускать .reg-файлы из командной строки в несопровождаемом
режиме или хотите формировать пакетные файлы, с помощью которых происходит
слияние .reg-файлов с реестром без вмешательства пользователя, используйте
команду Regedit со следующим синтаксисом: Regedit /s <имя_файла>.reg.
Во время пересылки .reg-файла в реестр происходят следующие действия.
Если путь в этом файле не указан, он добавляется.
Если какой-либо элемент данных еще не существует, он добавляется (вместе с его значением).
Если какой-либо элемент данных уже существует, его значение заменяется значением из .reg-файла.
Файлы регистрации действуют, даже если вы применили групповую политику,
отключающую средства редактирования реестра (в противном случае программы и
система не могли бы вносить изменения в реестр, если это требуется).
Вы можете распространять .reg-файл через электронную почту или позволять
пользователям копировать его из разделяемой точки сети во время входа (с помощью
какой-либо команды в скрипте входа). Затем вы можете предоставлять каждому
пользователю возможность его использования.
Пример файла регистрации
В качестве примера здесь приводится текст .reg-файла, слияние которого я выполняю
на всех компьютерах моей сети. Он добавляет в контекстное меню для папок
опцию, позволяющую открывать окно командной строки. Я предпочитаю открывать
окно Command Prompt для конкретного места вместо использования команды
CD для перехода в структуре папок.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\OpenNew]
@="Command Window Here" (здесь окно командной строки)
[HKEY_CLASSES_ROOT\Directory\shell\OpenNew\Command]
@="cmd.exe /k cd %1"
Чтобы создать этот .reg-файл путем изменений в реестре и экспорта раздела,
выполните следующие действия в Regedit.
Выберите раздел HKEY_CLASSES_ROOT\Directory\shell.
Создайте новый подраздел с именем OpenNew.
Откройте элемент данных Default в правой панели и присвойте ему значение Command Window Here. (Это значение реестра представляет фразу, которая будет появляться в контекстном меню, поэтому вы можете заменить фразу нужным для вас образом.)
Создайте новый подраздел с именем Command в подразделе OpenNew.
Откройте элемент данных Default в подразделе Command и введите значение cmd.exe /k cd %1.
Выделите подраздел OpenNew и выберите File\Export для создания .reg-файла, который содержит эти новые подразделы вместе с их данными.
Если на вашем компьютере несколько дисков, то вы можете добавить аналогичную
команду в контекстное меню, которое появляется при щелчке правой кнопкой
на каком-либо диске в Windows Explorer или в My Computer. Выполняются те же
шаги, что и при создании команды для папок, со следующими изменениями.
В качестве начальной точки используйте раздел HKEY_CLASSES_ROOT\Drive\shell.
Для элемента данных Default в подразделе HKEY_CLASSES_ROOT\Drive\shell\OpenNew\Command введите значение cmd.exe /k.
Экспортируйте раздел HKEY_CLASSES_ROOT\Drive\shell и распространяйте
этот .reg-файл всем пользователям, которые хотели бы использовать это удобное
средство.
Удаление элементов реестра с помощью .reg-файла
Вы можете также использовать .reg-файл для удаления подразделов и элементов
данных. Это настолько просто, что даже вызывает опасения.
Чтобы удалить подраздел, введите знак "минус" в начале имени этого подраздела.
Чтобы удалить отдельный элемент данных, введите знак "минус" вместо его значения ("Имя_элемента_данных=-").
Средства безопасности для реестра
Работа со средствами безопасности для реестра очень похожа на работу со средствами
безопасности, которые вы получаете с помощью файловой системы NTFS.
Вы можете применять полномочия доступа к разделам и подразделам на уровне группы
или пользователя, определять, хотите ли вы, чтобы полномочия были наследуемыми,
и создавать целую иерархию полномочий с любым уровнем уточнений. Иными
словами, как и в NTFS, у каждого раздела реестра есть свой список управления
доступом ACL (access control list).
По умолчанию заданы довольно жесткие уровни безопасности реестра. Администраторы
имеют полный доступ ко всему реестру, но другие пользователи имеют
полный доступ только к разделам, которые относятся к их собственным пользовательским
учетным записям (сюда включается HKEY_CURRENT_USER ), а также
доступ только по чтению к разделам, которые относятся к данному компьютеру и
установленному ПО. Тем не менее, вам может потребоваться изменение настроек
безопасности реестра, чтобы предоставлять или отменять полномочия на уровне
группы или пользователя. В этом разделе дается описание задач, связанных с заданием
полномочий.
Описание полномочий
Полномочия, которые вы можете применять к определенному разделу реестра, доступны
на двух уровнях.
Базовые полномочия, которые составлены из отдельных полномочий.
Отдельные полномочия.
Базовые полномочия – это группа из отдельных (более конкретных) полномочий.
Для большинства разделов базовые полномочия – это Full Control (Полный
доступ) и Read (Чтение).
Отдельные полномочия приводятся в таблице 4.2. Все полномочия из
таблицы 4.2 предоставляются пользователям, имеющим полномочия Full Control. Полномочия,
которые не попадают в группу Read (третья колонка табл. 4.2), называются специальными полномочиями.
Полномочия, применяемые к разделам реестра
| Полномочия |
Описание |
Включается в базовые полномочия Read? |
| Query Value |
Просмотр значения в элементе данных |
Да |
| Set Value |
Изменение значения в элементе данных |
Нет |
| Create Subkey |
Создание подраздела |
Нет |
| Enumerate Subkey |
Просмотр всех подразделов |
Да |
| Notify |
Получение или задание уведомлений аудита |
Да |
| Create Link |
Создание ссылки на другой раздел |
Нет |
| Delete |
Удаление раздела (и подразделов) |
Нет |
| Write DAC |
Изменение полномочий DAC |
Нет |
| Write Owner |
Изменение владельца |
Нет |
| Read Control |
Чтение списка ACL |
Да |
Работа с полномочиями
Для просмотра или задания полномочий по разделу реестра (включая поддеревья
верхнего уровня) щелкните правой кнопкой на этом разделе и выберите в контекстном
меню пункт Permissions. Появится диалоговое окно Permissions для этого раздела,
аналогичное рисунку 4.2.
(рис 4.2) Базовые полномочия для групп и пользователей представлены в диалоговом окне PermissionsПри выборе каждого пользователя или группы вы видите полномочия. Полномочия,
которые затенены, наследуются от родительских разделов и не могут быть
изменены в этом диалоговом окне.
Добавление пользователей или групп в список полномочий
Вы можете добавлять пользователей или группы в список полномочий доступ к
разделу с помощью следующих шагов.
Щелкните на кнопке Add, чтобы открыть диалоговое окно Select Users, Computers, Or Groups (Выбор пользователей, компьютеров или групп).
Щелкните на кнопке Locations и выберите компьютер или домен, который хотите использовать.
Если вы знаете имена пользователей и/или групп, введите имена, которые хотите добавить, отделяя каждое имя символом "точка с запятой". Если вы не знаете имен, щелкните на кнопке Advanced, чтобы задать критерии поиска, и выберите нужные имена. По окончании ввода имен щелкните на кнопке OK.
Вернувшись в диалоговое окно Permissions, выделите каждую новую запись и назначьте полномочия Read или Full Control. (Если вы не хотите использовать эти базовые полномочия, см. следующий раздел, "Задание специальных полномочий".)
По окончании щелкните на кнопке OK.
Примечание. Вы можете также удалить пользователя или группу в этом диалоговом
окне, выбрав соответствующую запись и щелкнув на кнопке Remove.
Задание специальных полномочий
Если вы хотите задать более конкретные полномочия для группы или пользователя,
то можете задать специальные полномочия, используя следующие шаги.
В диалоговом окне Permissions щелкните на кнопке Advanced, чтобы открыть для данного раздела диалоговое окно Advanced Security Settings.
Дважды щелкните на пользователе или группе, для которого хотите задать специальные полномочия (см. рис 4.3).
В секции Permissions установите флажок Allow (Разрешить) или Deny (Запретить) для каждого вида полномочий, которые вы хотите задать.
Задайте наследование, выбрав один из вариантов в раскрывающемся списке поля Apply Onto (Применять к).This key only (Только к этому разделу).
This key and subkeys (К этому разделу и подразделам).
Subkeys only (Только к подразделам).
(рис 4.3) Текущие полномочия для этого пользователя были заданы путем выбора базовых полномочий Read
Щелкните на кнопке OK, чтобы вернуться в диалоговое окно Advanced Security Settings. Задайте полномочия для другого пользователя или группы либо два раза щелкните на кнопках OK, чтобы закрыть все диалоговые окна.
Внимание. Не изменяйте никаких полномочий для раздела System, поскольку это может
вызвать проблемы для операционной системы и установленных приложений.
Изменение владельца раздела
Владелец раздела реестра может указывать пользователей и группы, которым разрешается
работа с этим разделом, что дает полный доступ конкретному человеку.
Получение владения разделом реестра является ответственной задачей, и она должна
выполняться только администратором, у которого имеется проблема доступа к
данному разделу (обычно в результате неверных изменений в списке ACL). По умолчанию
для компьютеров Windows Server 2003 владение определяется следующим
образом.
Для компьютеров, используемых как рядовые серверы, это члены локальной группы Administrators.
Для компьютеров, работающих как контроллеры домена, это члены группы Domain Administrators.
Для просмотра или изменения владения щелкните правой кнопкой на данном
разделе и выберите в контекстном меню пункт Permissions. Щелкните на кнопке
Advanced и затем щелкните на вкладке Owner (Владелец). Как видно из рисунка 4.4,
текущий владелец показан вверху вкладки Owner, и ниже представлен список допустимым
пользователей, которые могут стать владельцами.
(рис 4.4) В список, доступный для передачи владения, включен также текущий пользовательВы можете передавать владение любому пользователю из этого списка. Если вы хотите
выбрать владельца, находящегося вне текущих доступных групп Administrator,
щелкните на кнопке Other Users Or Groups (Другие пользователи или группы), чтобы
открыть диалоговое окно Select User, Computer, Or Group. Выберите имя, которое
хотите добавить в список, и затем вернитесь во вкладку Owner и выделите это
имя. Но прежде чем предоставить владение пользователю или группе, вы должны
изменить полномочия, разрешив полномочия Write Owner (предоставив новому владельцу
право управлять владением).
Аудит реестра
Вам может потребоваться аудит определенных действий с реестром, чтобы попытаться
найти источник какой-либо проблемы. Или вам может потребоваться аудит
просто из любопытства (если у вас достаточный объем свободного места на диске
для журнала аудита).
У вас имеются достаточно мощные и гибкие возможности аудита операций с
реестром; вы можете выполнять аудит разделов, пользователей, групп и любых
сочетаний. Для аудита операций с реестром нужно выполнить три шага.
Включить аудит как групповую политику.
Задать опции конфигурирования аудита в реестре.
Просматривать результаты аудита в журнале Security оснастки Event Viewer.
Включение аудита
Прежде чем выполнять аудит операций с реестром, вы должны включить аудит,
который отключен по умолчанию в Windows Server 2003. Включение/отключение
аудита осуществляется с помощью групповой политики, и вы можете использовать
для этого политику на уровне домена или локальную политику в зависимости от
действий в реестре, аудит которых хотите выполнять.
Включение аудита для домена. Чтобы включить аудит реестра на уровне домена,
откройте оснастку Active Directory Users and Computers и затем выполните следующие
шаги.
Откройте диалоговое окно Properties для данного домена.
Щелкните на вкладке Group Policy.
Выберите объект Default Domain Policy и щелкните на кнопке Edit.
Появится консоль Group Policy. Перейдите в Computer Configuration\Windows Settings\Security Settings\Local Policies\Audit Policy.
Дважды щелкните на записи Audit object access в правой панели, чтобы открыть диалоговое окно Properties.
Включите эту политику, установив флажок Define This Policy Settings (Определить следующие настройки политики) и установив флажок Success и/или флажок Failure (аудит успешных и/или неудачных попыток).
Примечание. Политики аудита реестра позволяют также выбирать аудит успешных
или неудачных попыток для каждого типа доступа к реестру. Это позволяет осуществлять
избирательную фильтрацию, не допуская излишнего разрастания файла
журнала.
Включение аудита на локальном компьютере. Чтобы включить аудит реестра на
каком-либо компьютере, выполните следующие шаги.
Откройте средство администрирования Local Security Settings.
В дереве консоли раскройте Local Policies и выберите Audit Policy.
Дважды щелкните на записи Audit object access в правой панели и выберите действия, аудит которых хотите осуществлять.
Задание опций аудита в реестре
После включения аудита вы можете задать действия, аудит которых хотите осуществлять.
Откройте Regedit, щелкните правой кнопкой на родительском разделе, который
хотите использовать как верхнюю точку процесса аудита (по умолчанию аудит
наследуется подразделами) и выберите в контекстном меню пункт Permissions. Щелкните
на кнопке Advanced и перейдите во вкладку Audit. Щелкните на кнопке Add,
чтобы начать добавление пользователей и групп, аудит которых хотите осуществлять.
Используйте следующие рекомендации.
Для аудита действий определенного лица выберите этого пользователя.
Для аудита, позволяющего увидеть, кто и что делает в реестре, лучше всего выбрать группу Everyone.
В более сложных случаях выберите подходящие группы и пользователей.
При выборе каждого пользователя или группы выберите также действия, аудит
которых хотите осуществлять, как это показано на рисунке 4.5.
По умолчанию аудит выполняется для текущего раздела и наследуется подразделами.
Вы можете изменить это поведение, выбрав другой вариант в раскрывающемся
списке Apply Onto. Имеются три варианта: This key only, This key and subkeys
и Subkeys only.
Вот некоторые советы по конфигурированию аудита.
Включение аудита вызывает снижение производительности. Чем больше групп и пользователей вы добавляете, тем больше задач вы включаете в аудит и тем больше влияете на уровень производительности.
Почти нет смысла выполнять аудит неудачных попыток отдельных пользователей, поскольку в большинстве случаев это происходит из-за недостаточных полномочий пользователя. Если этот пользователь не может выполнить какую-либо задачу, то нет смысла сообщать об этом в виде события аудита. Если приложения сообщают об ошибках и служба поддержки предполагает наличие проблемы доступа к данным реестра, задайте аудит неудачных попыток для раздела SYSTEM.
Не выполняйте аудит успешных попыток для обычных задач, которые не могут
принести вреда, например, запрос значения. Этот может привести только к огромным
размерам журнала.
(рис 4.5) Выберите действие и результат для каждой задачи реестра, аудит которой хотите осуществлять
Просмотр журнала аудита
Аудит – это события системы безопасности, поэтому результаты аудита находятся в
журнале Security оснастки Event Viewer. Откройте Event Viewer и выберите журнал
Security для просмотра событий аудита.
Reg.exe
Reg.exe – это надежное и многофункциональное средство командной строки, которое
вы можете использовать для управления записями реестра. Как и для команды
net, для reg.exe требуется вторая команда, например, reg add. Эта программа позволяет
работать как с локальными, так и с удаленными реестрами. Но если вы применяете
это средство к удаленному реестру, то можете работать только с HKEY_LOCAL_MACHINE и HKEY_CURRENT_USER.
Общие указания по работе с Reg.exe
Существует несколько общих правил и рекомендаций по работе с командами reg, и
они приводятся здесь, чтобы не повторять их для каждой команды.
При вводе имени раздела или подраздела вы должны ввести полный путь к этому
разделу, начиная с поддерева. Однако вы можете использовать следующие сокращения
для имен поддеревьев.
| Сокращение |
Поддерево |
| HKCR |
HKEY_CLASSES_ROOT |
| HKLM |
HKEY_LOCAL_MACHINE |
| HKCU |
HKEY_CURRENT_USER |
| HKCC |
HKEY_CURRENT_CONFIGURATION |
Кроме того, вам будут полезны следующие сведения.
Указываемый путь не зависит от используемого регистра букв.
Имя нового раздела зависит от регистра букв.
Имена разделов, содержащие пробелы, должны быть заключены в кавычки.
Регистр букв не имеет значения для существующих элементов данных.
Имя нового элемента данных и его значение зависят от регистра букв.
Зависимость от регистра букв означает, что соответствующие элементы записываются
в реестр в том виде, как вы их вводите, то есть с прописными и строчными
буквами. Для функций реестра это обычно не имеет значения, поскольку, за несколькими
исключениями, поиск разделов, элементов данных или значений в реестре
не завит от регистра букв. Но вы можете, например, ввести NewFeatureName
вместо newfeaturename, поскольку использование прописных букв упрощает чтение
записи.
Reg Add
Команда reg add используется для добавления в реестр раздела и/или элемента данных.
Она имеет следующий синтаксис:
reg add [\\Машина\]Имя_раздела[/v Имя_значения\/ve][/t Тип]
[/s Разделитель][/d Данные][/f]
где
\\Машина – это имя удаленного компьютера. Пропустите этот параметр, если вы
работаете на локальной машине. Имя_раздела – это имя раздела, где будет помещена
новая запись, или имя нового раздела, который вы добавляете в реестр. Если вы
добавляете раздел, то можете не указывать все остальные параметры (см. ниже).
Например, если у вас имеется раздел с именем HKEY_CURRENT_USER\Software\CompanyDatabase
и вы хотите добавить подраздел с именем ColorScheme, введите следующую команду.
reg add HKCU\Software\ CompanyDatabase\ColorScheme
Система возвратит сообщение "The operation completed successfully" (Операция
успешно завершена).
Примечание. Если вы используете пробел в имени, не используя для этого имени
кавычек, то система предполагает, что любой текст после первого слова является
параметром, и выводит сообщение об ошибке: "Too many command-line parameters"
(Слишком много параметров командной строки).
Если вы вводите новый элемент данных, то используются следующие параметры.
Для одновременного ввода нового раздела и нового элемента данных просто
введите имя нового раздела в конце пути.
/v Имя_значения – это имя нового элемента данных.
Если это имя содержит пробелы, заключите его в кавычки.
/ve указывает пустое значение.
/t Тип указывает тип данных для нового элемента данных. Если пропустить этот
параметр, то по умолчанию задается тип данных REG_SZ.
/s Разделитель указывает символ, который вы хотите использовать как разделитель
в случае нескольких строк данных (для типов данных REG_MULTI_SZ ).
/d Данные – это данные, которые вы хотите присвоить добавляемому элементу данных.
/f вызывает перезапись значения существующей записи.
Reg Delete
Команда reg delete используется для удаления подразделов и/или элементов данных
из реестра. Она имеет следующий синтаксис.
reg delete [\\Машина\]Имя_раздела[/v Имя_значения][/va][/f]
где
\\Машина – это имя удаленного компьютера. Пропустите этот параметр, если вы
работаете в локальном реестре.
Имя_раздела – это подраздел для данной записи (или подраздел, который вы хотите
удалить). Указывайте полный путь.
/v Имя_значения – удаление элемента данных с этим именем. Если это имя содержит
пробелы, заключите его в кавычки.
/va – удаление всех элементов данных в указанном подразделе.
/ve – удаление пустого элемента данных.
/f вызывает операцию удаления без подтверждения пользователем.
Reg Copy
Команда reg copy используется для копирования записи реестра в новое место в
локальном или удаленном реестре. Она имеет следующий синтаксис.
reg copy [\\Машина\]Исходный_раздел[\\Машина\]Целевой_раздел[/s][/f]
где
\\Машина\]Исходный_раздел – это имя компьютера и путь в реестре для исходного
компьютера. Пропустите параметр "Машина", если это локальный компьютер.
\\Машина\]Целевой_раздел – это имя компьютера и путь в реестре для целевого
компьютера. Пропустите параметр "Машина", если это локальный компьютер.
/s – копирование всех подразделов, находящихся в последнем разделе указанного
пути, вместе с элементами данных, содержащимися в этих подразделах.
/f вызывает копирование без запроса подтверждения пользователем.
Reg Compare
Команда reg compare используется для сравнения одной записи реестра с другой
записью реестра на локальном или удаленном компьютере. Она имеет следующий
синтаксис.
reg compare [\\Машина\]Имя_раздела_1[\\Машина\]Имя_раздела_2
[/v Имя_значения][/s][/f] [Output]
где
Машина – это имя компьютера. Пропустите этот параметр для локального
компьютера.
Имя_раздела_1, Имя_раздела_2 – указывают полный путь в реестре к первому и
второму подразделам.
/v Имя_значения – сравнение значений элемента данных, указанного параметром Имя_значения (имена элементов данных, содержащих пробелы, заключайте в кавычки).
Параметр Output принимает одно из следующих значений.
/oa – вывод всех отличий и совпадений.
/od – вывод только отличий.
/os – вывод только совпадений.
/on – не выводится никаких результатов.
Система отвечает одним из следующих возвращаемых кодов.
0 Сравнение прошло успешно, и нет никаких отличий.
1 Сравнение провести не удалось.
2 Сравнение прошло успешно, и есть отличия.
Reg Export
Команда reg export используется для экспорта записи реестра в файл. Эта команда дает
такой же результат, как и команда File\Export Registry File при работе в Regedit. Эта
команда работает только с локальным реестром. Она имеет следующий синтаксис.
reg export Имя_раздела Имя_файла [/y]
где
Имя_раздела – полный путь в реестре к разделу, который вы хотите экспортировать.
Имя_файла – имя .reg-файла, в который вы хотите экспортировать раздел.
/y – перезапись существующего файла с именем Имя_файла без запроса подтверждения.
Reg Import
Команда reg import используется для импорта записи реестра из .reg-файла. Она
имеет следующий синтаксис.
reg import Имя_файла
где
Имя_файла – имя .reg-файла, который вы хотите импортировать.
Эта команда дает такой же результат, как и команда File\Import Registry File при
работе в Regedit или двойной щелчок на .reg-файле.
Reg Save
Команда reg save используется для сохранения раздела в файле улья. Она имеет
следующий синтаксис.
reg save \\Машина Имя_раздела Имя_файла [/y]
где
\\Машина – это имя удаленного компьютера (пропустите этот параметр для
локального компьютера).
Имя_раздела – полный путь в реестре к разделу.
Имя_файла – целевой файл (с расширением .hiv).
/y – перезапись существующего файла с именем Имя_файла без запроса
подтверждения перезаписи.
Reg Restore
Команда reg restore используется для восстановления какого-либо раздела из
HIV-файла, созданного командой reg save. Она имеет следующий синтаксис.
reg restore [\\Машина] Имя_раздела Имя_файла
где
\\Машина – это имя удаленного компьютера (пропустите этот параметр для локального компьютера).
Имя_раздела – полный путь в реестре к целевому разделу.
Имя_файла – имя сохраненного ранее файла, из которого вы хотите теперь выполнить восстановление
Reg Load
Команда reg load используется для загрузки файла улья (созданного с помощью
команды reg save) в другую часть реестра. Это полезно при поиске проблемных записей
реестра. Она имеет следующий синтаксис.
где
\\Машина – это имя удаленного компьютера (пропустите этот параметр для
локального компьютера).
Имя_раздела – полный путь к месту в реестре, которое вы хотите использовать для
размещения данного улья.
Имя_файла – имя файла улья.
Примечание. Этот раздел не является постоянным, и он исчезает, когда вы
перезагружаете компьютер.
Reg Unload
Команда reg unload используется для удаления улья, который вы загрузили с
помощью команды reg load. Она имеет следующий синтаксис.
reg unload \\Машина Имя_раздела
где
\\Машина – это имя удаленного компьютера (пропустите этот параметр для
локального компьютера).
Имя_раздела – полный путь к месту в реестре, где содержится загруженный вами
файл.
Reg Query
Команда reg query используется для получения информации о записи или
нескольких записях в разделе или подразделе. Она имеет следующий синтаксис.
reg query \\Машина Имя_раздела [{/v Имя_значения\/ve}][/s]
[/se Разделитель][/f Данные] [{/k\/d}][/c][/e][/t Тип][/z]
где
Машина – это имя удаленного компьютера (пропустите этот параметр для локального компьютера).
Имя_раздела – полный путь к разделу, который вы запрашиваете.
/v Имя_значения – имя запрашиваемого элемента данных реестра. Если этот
параметр опущен, выдаются все элементы данных из раздела Имя_раздела. Имя_значения не является обязательным параметром, если используется параметр /f.
/ve – запрашиваются пустые элементы данных.
/s – запрашиваются все подразделы и элементы данных.
/se Разделитель указывает разделитель значений, который вы хотите искать в
элементах данных типа REG_MULTI_SZ. Если Разделитель не указан, то система использует \0.
RegMon
Один мой знакомый по журналу, для которого я пишу статьи (Windows .Net
Magazine), является очень хорошим специалистом по операционным системам. Я
уже давно (начиная с Windows NT) использую написанную им утилиту под названием
RegMon, которая позволяет мне следить за доступом приложений к реестру в
реальном масштабе времени.
Вы можете задавать фильтры, чтобы ограничивать типы информации, о которой
сообщает эта программа, выделять нужную запись и переходить непосредственно
к подразделу реестра, на которую ссылается эта запись. Это отличный способ
отслеживания элементов реестра, которые добавляются во время установки ПО.
Запустите regmon.exe, прежде чем программа установки начнет копировать файлы и
выполнять запись в разделы реестра, и вы узнаете все, что происходит в реестре.
Сохраните результаты, и затем проверьте эти записи после того, как удалите
(деинсталлируете) соответствующее ПО. Поскольку большинство процедур деинсталляции
не могут целиком удалить информацию реестра, которая была записана во время
установки, то вы можете очистить свой реестр вручную.
RegMon распространяется бесплатно, и вы можете загрузить ее из
http://www.sysinternals.com. В дополнение к этой утилите вы найдете много полезных
утилит на данном веб-сайте.