Реестр Windows — это иерархическая база данных , в которой хранятся низкоуровневые настройки для операционной системы Microsoft Windows и приложений, которые предпочитают использовать реестр. Ядро , драйверы устройств , службы , диспетчер учетных записей безопасности и пользовательские интерфейсы могут использовать реестр. Реестр также позволяет получать доступ к счетчикам для профилирования производительности системы.
Другими словами, реестр или реестр Windows содержит информацию, настройки, опции и другие значения для программ и оборудования, установленных во всех версиях операционных систем Microsoft Windows. Например, когда устанавливается программа, в реестр Windows добавляется новый подраздел, содержащий такие настройки, как местоположение программы, ее версия и способ запуска программы.
При появлении в Windows 3.1 реестр Windows в первую очередь хранил информацию о конфигурации для компонентов на базе COM . Windows 95 и Windows NT расширили его использование для рационализации и централизации информации в изобилии файлов INI , которые содержали конфигурации для отдельных программ и хранились в различных местах. [1] [2] Для приложений Windows не является обязательным использование реестра Windows. Например, приложения .NET Framework используют файлы XML для конфигурации, в то время как переносимые приложения обычно хранят свои файлы конфигурации вместе со своими исполняемыми файлами .
До появления реестра Windows файлы . INI хранили настройки каждой программы в виде текстового или двоичного файла , часто расположенного в общем месте, которое не предоставляло пользовательских настроек в многопользовательском сценарии. Напротив, реестр Windows хранит все настройки приложения в одном логическом репозитории (но в нескольких отдельных файлах) и в стандартизированной форме. По словам Microsoft , это дает несколько преимуществ по сравнению с файлами . INI. [2] [3] Поскольку анализ файла выполняется гораздо эффективнее в двоичном формате, его можно считывать или записывать быстрее, чем текстовый файл INI. Кроме того, в реестре можно хранить строго типизированные данные , в отличие от текстовой информации, хранящейся в файлах . INI. Это преимущество при редактировании ключей вручную с помощью regedit.exe
встроенного редактора реестра Windows. Поскольку пользовательские настройки реестра загружаются из пользовательского пути, а не из системного расположения только для чтения, реестр позволяет нескольким пользователям совместно использовать одну и ту же машину, а также позволяет программам работать для менее привилегированных пользователей. Резервное копирование и восстановление также упрощаются, поскольку доступ к реестру можно осуществлять через сетевое соединение для удаленного управления/поддержки, в том числе из скриптов, используя стандартный набор API , при условии, что служба удаленного реестра запущена и правила брандмауэра это разрешают.
Поскольку реестр представляет собой базу данных, он обеспечивает улучшенную целостность системы с такими функциями, как атомарные обновления . Если два процесса попытаются обновить одно и то же значение реестра одновременно, изменение одного процесса будет предшествовать изменению другого, и общая согласованность данных будет сохранена. При внесении изменений в файлы .INI такие условия гонки могут привести к несогласованным данным, которые не соответствуют ни одному из попыток обновления. Windows Vista и более поздние операционные системы предоставляют транзакционные обновления реестра с помощью диспетчера транзакций ядра , расширяя гарантии атомарности для нескольких изменений ключей или значений с помощью традиционной семантики фиксации-отмены. (Однако следует отметить, что NTFS также предоставляет такую поддержку для файловой системы, поэтому такие же гарантии теоретически могут быть получены с помощью традиционных файлов конфигурации.)
Реестр содержит два основных элемента: ключи и значения . Ключи реестра — это объекты-контейнеры, похожие на папки. Значения реестра — это неконтейнерные объекты, похожие на файлы. Ключи могут содержать значения и подразделы. Ключи ссылаются с помощью синтаксиса, похожего на имена путей Windows, с использованием обратных косых черт для указания уровней иерархии. Ключи должны иметь нечувствительное к регистру имя без обратных косых черт.
Доступ к иерархии ключей реестра возможен только из известного дескриптора корневого ключа (который является анонимным, но эффективным значением которого является постоянный числовой дескриптор), который сопоставлен содержимому ключа реестра, предварительно загруженного ядром из сохраненного «улья», или содержимому подключаемого ключа в другом корневом ключе, или сопоставлен с зарегистрированной службой или DLL, которая обеспечивает доступ к содержащимся в нем подключаемым ключам и значениям.
Например, HKEY_LOCAL_MACHINE\Software\Microsoft\Windows ссылается на подраздел «Windows» подраздела «Microsoft» подраздела «Software» корневого раздела HKEY_LOCAL_MACHINE.
Существует семь предопределенных корневых ключей, традиционно именуемых в соответствии с их постоянными идентификаторами, определенными в Win32 API, или с помощью синонимичных сокращений (в зависимости от приложений): [4]
Как и другие файлы и службы в Windows, все ключи реестра могут быть ограничены списками управления доступом (ACL) в зависимости от привилегий пользователя, токенов безопасности, полученных приложениями, или политик безопасности системы, применяемых системой (эти ограничения могут быть предопределены самой системой и настроены локальными системными администраторами или администраторами домена). Различные пользователи, программы, службы или удаленные системы могут видеть только некоторые части иерархии или отдельные иерархии из одних и тех же корневых ключей.
Значения реестра представляют собой пары имя/данные, хранящиеся в ключах. Значения реестра указываются отдельно от ключей реестра. Каждое значение реестра, хранящееся в ключе реестра, имеет уникальное имя, регистр букв которого не имеет значения. Функции API Windows , которые запрашивают и обрабатывают значения реестра, принимают имена значений отдельно от пути ключа или дескриптора, который идентифицирует родительский ключ. Значения реестра могут содержать обратные косые черты в своих именах, но это затрудняет их различение от их путей ключей при использовании некоторых устаревших функций API реестра Windows (использование которых устарело в Win32).
Терминология несколько вводит в заблуждение, поскольку каждый раздел реестра похож на ассоциативный массив , где стандартная терминология ссылается на часть имени каждого значения реестра как на «ключ». Термины являются отходом от 16-битного реестра в Windows 3, в котором разделы реестра не могли содержать произвольные пары имя/данные, а содержали только одно неименованное значение (которое должно было быть строкой). В этом смысле реестр Windows 3 был похож на один ассоциативный массив, в котором ключи (в смысле как «ключ реестра», так и «ключ ассоциативного массива») образовывали иерархию, а все значения реестра были строками. Когда был создан 32-битный реестр, то же самое было и с дополнительной возможностью создания нескольких именованных значений для каждого ключа, и значения имен были несколько искажены. [6] Для совместимости с предыдущим поведением каждый раздел реестра может иметь значение «по умолчанию», именем которого является пустая строка.
Каждое значение может хранить произвольные данные с переменной длиной и кодировкой, но которые связаны с символическим типом (определяемым как числовая константа), определяющим, как анализировать эти данные. Стандартные типы: [7]
Ключи на корневом уровне иерархической базы данных обычно именуются по их определениям Windows API , которые все начинаются с «HKEY». [2] Их часто сокращают до трех- или четырехбуквенного короткого имени, начинающегося с «HK» (например, HKCU и HKLM). Технически они являются предопределенными дескрипторами (с известными постоянными значениями) для определенных ключей, которые либо поддерживаются в памяти, либо хранятся в файлах кустов, хранящихся в локальной файловой системе и загружаемых ядром системы во время загрузки, а затем совместно используются (с различными правами доступа) всеми процессами, запущенными в локальной системе, или загружаются и отображаются во всех процессах, запущенных в сеансе пользователя, когда пользователь входит в систему.
Узлы HKEY_LOCAL_MACHINE (локальные данные конфигурации машины) и HKEY_CURRENT_USER (данные конфигурации пользователя) имеют схожую структуру; пользовательские приложения обычно ищут свои настройки, сначала проверяя их в "HKEY_CURRENT_USER\Software\Имя поставщика\Имя приложения\Версия\Имя настройки", и если настройка не найдена, вместо этого ищут в том же месте под ключом HKEY_LOCAL_MACHINE. Однако обратное может применяться для параметров политики, принудительно применяемых администратором , где HKLM может иметь приоритет над HKCU. Программа Windows Logo предъявляет особые требования к тому, где могут храниться различные типы пользовательских данных, и к соблюдению концепции наименьших привилегий , чтобы для использования приложения не требовался доступ на уровне администратора. [a] [10]
Сокращенно HKLM, HKEY_LOCAL_MACHINE хранит настройки, специфичные для локального компьютера. [11]
Ключ, обнаруженный HKLM, на самом деле не хранится на диске, а поддерживается в памяти ядром системы для сопоставления всех других подразделов. Приложения не могут создавать никаких дополнительных подразделов. В Windows NT этот раздел содержит четыре подраздела, "SAM", "SECURITY", "SYSTEM" и "SOFTWARE", которые загружаются во время загрузки в соответствующие файлы, расположенные в папке %SystemRoot%\System32\config\. Пятый подраздел, "HARDWARE", является изменчивым и создается динамически, и как таковой не хранится в файле (он предоставляет вид всех обнаруженных в данный момент устройств Plug-and-Play). В Windows Vista и выше шестой и седьмой подразделы, "COMPONENTS" и "BCD", сопоставлены в памяти ядром по требованию и загружаются из %SystemRoot%\System32\config\COMPONENTS или из данных конфигурации загрузки, \boot\BCD в системном разделе.
Несмотря на то, что реестр представляет собой интегрированную иерархическую базу данных, ветви реестра фактически хранятся в нескольких дисковых файлах, называемых кустами . [17] (Слово «улей» является шуткой . ) [18]
Некоторые кусты изменчивы и вообще не хранятся на диске. Примером этого является куст ветви, начинающейся с HKLM\HARDWARE. Этот куст записывает информацию об оборудовании системы и создается каждый раз, когда система загружается и выполняет обнаружение оборудования.
Индивидуальные настройки пользователей в системе хранятся в кусте (файле на диске) для каждого пользователя. Во время входа пользователя система загружает куст пользователя в ключ HKEY_USERS и устанавливает символическую ссылку HKCU (HKEY_CURRENT_USER) для указания на текущего пользователя. Это позволяет приложениям неявно хранить/извлекать настройки для текущего пользователя в ключе HKCU.
Не все улья загружаются одновременно. Во время загрузки загружается только минимальный набор ульев, а после этого улья загружаются по мере инициализации операционной системы и входа пользователей в систему или всякий раз, когда улей явно загружается приложением.
Реестр физически хранится в нескольких файлах, которые, как правило, скрыты от API пользовательского режима, используемых для манипулирования данными внутри реестра. В зависимости от версии Windows, будут разные файлы и разные местоположения для этих файлов, но все они находятся на локальной машине. Местоположение файлов системного реестра в Windows NT: %SystemRoot%\System32\config\
; пользовательский куст реестра HKEY_CURRENT_USER хранится внутри Ntuser.dat
профиля пользователя. Для каждого пользователя существует один такой файл; если у пользователя есть перемещаемый профиль , то этот файл будет копироваться на сервер и с него при выходе из системы и входе в систему соответственно. Второй пользовательский файл реестра с именем UsrClass.dat содержит записи реестра COM и по умолчанию не перемещается.
Системы Windows NT хранят реестр в двоичном формате файла, который может быть экспортирован, загружен и выгружен редактором реестра в этих операционных системах. Следующие файлы системного реестра хранятся в %SystemRoot%\System32\config\
:
Sam
– HKEY_LOCAL_MACHINE\SAMSecurity
– HKEY_LOCAL_MACHINE\SECURITYSoftware
– HKEY_LOCAL_MACHINE\SOFTWARESystem
– HKEY_LOCAL_MACHINE\SYSTEMDefault
– HKEY_USERS\.DEFAULTUserdiff
– Не связано с ульем. Используется только при обновлении операционных систем. [19]В папке профиля каждого пользователя хранится следующий файл:
%USERPROFILE%\Ntuser.dat
– HKEY_USERS\< User SID > (связан с HKEY_CURRENT_USER)В Windows 2000, Server 2003 и Windows XP для сопоставления файлов и информации COM используется следующий дополнительный пользовательский файл:
%USERPROFILE%\Local Settings\Application Data\Microsoft\Windows\Usrclass.dat
(путь локализован) – HKEY_USERS\<User SID>_Classes (HKEY_CURRENT_USER\Software\Classes)Для Windows Vista и более поздних версий путь был изменен на:
%USERPROFILE%\AppData\Local\Microsoft\Windows\Usrclass.dat
(путь не локализован) псевдоним %LocalAppData%\Microsoft\Windows\Usrclass.dat
– HKEY_USERS\<User SID>_Classes (HKEY_CURRENT_USER\Software\Classes)Windows 2000 хранит альтернативную копию кустов реестра (.ALT) и пытается переключиться на нее при обнаружении повреждения. [20] Windows XP и Windows Server 2003 не поддерживают System.alt
куст, поскольку NTLDR в этих версиях Windows может обрабатывать System.log
файл для обновления куста System, который стал несогласованным во время выключения или сбоя. Кроме того, %SystemRoot%\Repair
папка содержит копию кустов реестра системы, которые были созданы после установки и первого успешного запуска Windows.
Каждый файл данных реестра имеет связанный файл с расширением «.log», который действует как журнал транзакций , используемый для обеспечения того, чтобы любые прерванные обновления могли быть завершены при следующем запуске. [21] Внутренне файлы реестра разделены на «корзины» по 4 КБ , которые содержат наборы «ячеек». [21]
Файлы реестра хранятся в %WINDIR%
каталоге под именами USER.DAT
и SYSTEM.DAT
с добавлением CLASSES.DAT
в Windows ME. Также каждый профиль пользователя (если профили включены) имеет свой собственный USER.DAT
файл, который находится в каталоге профиля пользователя в %WINDIR%\Profiles\<Username>\
.
Вызывается единственный файл реестра REG.DAT
, который сохраняется в %WINDIR%
каталоге.
Для доступа к файлам реестра устройство необходимо перевести в специальный режим, используя один из следующих способов:
Если какой-либо из вышеперечисленных методов сработал, файлы реестра устройства можно найти в следующем месте:
{Телефон}\EFIESP\Windows\System32\config
Реестр содержит важную информацию о конфигурации операционной системы, установленных приложений, а также индивидуальные настройки для каждого пользователя и приложения. Небрежное изменение конфигурации операционной системы в реестре может привести к необратимому повреждению, поэтому обычно только программы-установщики вносят изменения в базу данных реестра во время установки/настройки и удаления. Если пользователь хочет вручную отредактировать реестр, Microsoft рекомендует перед изменением сделать резервную копию реестра. [22] Когда программа удаляется из панели управления, она может быть удалена не полностью, и в случае ошибок или сбоев, вызванных ссылками на отсутствующие программы, пользователю может потребоваться вручную проверить внутренние каталоги, такие как файлы программ. После этого пользователю может потребоваться вручную удалить любую ссылку на удаленную программу в реестре. Обычно это делается с помощью RegEdit.exe. [23] Редактирование реестра иногда необходимо при работе со специфическими для Windows проблемами, например, проблемы при входе в домен можно решить путем редактирования реестра. [24]
Реестр Windows можно редактировать вручную с помощью таких программ, как RegEdit.exe, хотя эти инструменты не раскрывают некоторые метаданные реестра, такие как дата последнего изменения.
Редактор реестра для операционных систем серии 3.1/95 — RegEdit.exe, а для Windows NT — RegEdt32.exe; функции объединены в Windows XP. Дополнительные и сторонние инструменты, похожие на RegEdit.exe, доступны для многих версий Windows CE.
Редактор реестра позволяет пользователям выполнять следующие функции:
REG
файлов ., экспорт данных в двоичном формате Hive.REG
Файлы (также известные как записи регистрации) представляют собой текстовые файлы, удобные для чтения человеком, для экспорта и импорта частей реестра с использованием синтаксиса на основе INI . В Windows 2000 и более поздних версиях они содержат строку Windows Registry Editor Version 5.00 в начале, а в системах Windows 9x и NT 4.0 — строку REGEDIT4 . [26] Файлы REG в Windows 2000 и более поздних версиях основаны на Unicode , а в системах Windows 9x и NT 4.0 — на ANSI . [ требуется цитата ] Файлы формата Windows 9x .REG
совместимы с Windows 2000 и более поздними версиями. [26] Редактор реестра в Windows на этих системах также поддерживает экспорт .REG
файлов в формате Windows 9x/NT. [ требуется цитата ] Данные хранятся в .REG
файлах с использованием следующего синтаксиса: [26]
[< Имя куста>\<Имя ключа >\< Имя подключаемого ключа>] "Имя значения" = <Тип значения>:<Данные значения>
Значение ключа по умолчанию можно изменить, используя «@» вместо «Имя значения»:
[< Имя куста>\< Имя ключа>\< Имя подключаемого ключа>] @ = <Тип значения>:<Данные значения>
Для строковых значений не требуется <Value type> (см. пример), но обратные косые черты ('\') необходимо записывать как двойную обратную косую черту ('\\'), а кавычки ('"') — как обратную косую черту-кавычку ('\"').
Например, чтобы добавить значения «Значение A», «Значение B», «Значение C», «Значение D», «Значение E», «Значение F», «Значение G», «Значение H», «Значение I», «Значение J», «Значение K», «Значение L» и «Значение M» в ключ HKLM\SOFTWARE\Foobar:
Редактор реестра Windows версии 5.00[ HKEY_LOCAL_MACHINE \SOFTWARE\Foobar] "Значение A" = "<Строковое значение данных с экранированными символами>" "Значение B" = hex:<Двоичные данные (в виде списка шестнадцатеричных значений, разделенных запятыми)> "Значение C" = dword:<Целое значение DWORD> "Значение D" = hex(0):<REG_NONE (в виде списка шестнадцатеричных значений, разделенных запятыми)> "Значение E" = hex(1):<REG_SZ (в виде списка шестнадцатеричных значений, разделенных запятыми, представляющих строку UTF-16LE с завершающим символом NUL)> "Значение F" = hex(2):<Расширяемые строковые данные (в виде списка шестнадцатеричных значений, разделенных запятыми, представляющих строку UTF-16LE с завершающим символом NUL)> "Значение G" = hex(3):<Двоичные данные (в виде список шестнадцатеричных значений, разделенных запятыми)> ; равно "Значению B" "Значение H" = hex(4):<значение DWORD (как список из 4 шестнадцатеричных значений, разделенных запятыми, в порядке байтов от младшего к старшему)> "Значение I" = hex(5):<значение DWORD (как список из 4 шестнадцатеричных значений, разделенных запятыми, в порядке байтов от старшего к младшему)> "Значение J" = hex(7):<данные многострочного значения (как список шестнадцатеричных значений, разделенных запятыми, представляющих строки UTF-16LE с нулевым завершением)> "Значение K" = hex(8):<REG_RESOURCE_LIST (как список шестнадцатеричных значений, разделенных запятыми)> "Значение L" = hex(a):<REG_RESOURCE_REQUIREMENTS_LIST (как список шестнадцатеричных значений, разделенных запятыми)> "Значение M" = hex(b):<значение QWORD (в виде списка из 8 шестнадцатеричных значений, разделенных запятыми, в прямом порядке байтов)>
Данные из .REG
файлов можно добавлять/объединять с реестром, дважды щелкнув эти файлы или используя переключатель /s в командной строке. REG
Файлы также можно использовать для удаления данных реестра.
Чтобы удалить ключ (и все подключи, значения и данные), перед именем ключа должен стоять знак минус («-»). [26]
Например, чтобы удалить ключ HKLM\SOFTWARE\Foobar (и все его подразделы, значения и данные),
[ - HKEY_LOCAL_MACHINE \SOFTWARE\Foobar]
Чтобы удалить значение (и его данные), удаляемые значения должны иметь знак минус («-») после знака равенства («=»). [26]
Например, чтобы удалить только значения «Значение A» и «Значение B» (и их данные) из ключа HKLM\SOFTWARE\Foobar:
[ HKEY_LOCAL_MACHINE \SOFTWARE\Foobar] "Значение A" =- "Значение B" =-
Чтобы удалить только значение по умолчанию ключа HKLM\SOFTWARE\Foobar (и его данные):
[ HKEY_LOCAL_MACHINE \SOFTWARE\Foobar] @ =-
Строки, начинающиеся с точки с запятой, считаются комментариями:
; Это комментарий. Его можно разместить в любой части .reg-файла [ HKEY_LOCAL_MACHINE \SOFTWARE\Foobar] "Значение" = "Пример строки"
Групповые политики Windows могут изменять разделы реестра для ряда машин или отдельных пользователей на основе политик. Когда политика впервые вступает в силу для машины или отдельного пользователя машины, параметры реестра, указанные как часть политики, применяются к настройкам машины или пользователя.
Windows также будет искать обновленные политики и применять их периодически, обычно каждые 90 минут. [27]
Политика определяет, к каким машинам и пользователям она должна применяться. То, попадает ли машина или пользователь в область действия политики или нет, определяется набором правил, которые могут фильтровать по расположению машины или учетной записи пользователя в организационном каталоге, конкретным пользователям или учетным записям машин или группам безопасности. Более сложные правила можно настроить с помощью выражений инструментария управления Windows . Такие правила могут фильтровать по таким свойствам, как имя поставщика компьютера, архитектура ЦП, установленное программное обеспечение или сети, к которым подключены.
Например, администратор может создать политику с одним набором настроек реестра для машин в бухгалтерском отделе и политику с другим (блокирующим) набором настроек реестра для терминалов киосков в зоне посетителей. Когда машина перемещается из одной области в другую (например, при изменении ее имени или перемещении в другое организационное подразделение), правильная политика применяется автоматически. Когда политика изменяется, она автоматически применяется повторно ко всем машинам, которые в данный момент находятся в ее области.
Политика редактируется с помощью ряда административных шаблонов, которые предоставляют пользовательский интерфейс для выбора и изменения настроек. Набор административных шаблонов расширяем, и программные пакеты, поддерживающие такое удаленное администрирование, могут регистрировать свои собственные шаблоны.
Реестр можно изменять несколькими способами из командной строки . Инструменты Reg.exe
и RegIni.exe
утилиты включены в Windows XP и более поздние версии Windows. Альтернативные места для устаревших версий Windows включают компакт-диски Resource Kit или оригинальный установочный компакт-диск Windows.
Также .REG
файл можно импортировать из командной строки с помощью следующей команды:
Файл RegEdit.exe /s
/s означает, что файл будет тихо объединен с реестром. Если /s
параметр пропущен, пользователю будет предложено подтвердить операцию. В Windows 98, Windows 95 и, по крайней мере, в некоторых конфигурациях Windows XP /s
переключатель также заставляет RegEdit.exe
игнорировать настройку в реестре, которая позволяет администраторам отключать его. При использовании переключателя /s
не RegEdit.exe
возвращает соответствующий код возврата, если операция завершается неудачей, в отличие от Reg.exe
того, который возвращает.
RegEdit.exe /e файл
экспортирует весь реестр в формате V5 в .REG
файл UNICODE, в то время как любой из
RegEdit.exe /e файл HKEY_CLASSES_ROOT[\<ключ>]RegEdit.exe /e файл HKEY_CURRENT_CONFIG[\<ключ>]RegEdit.exe /e файл HKEY_CURRENT_USER[\<ключ>]RegEdit.exe /e файл HKEY_LOCAL_MACHINE[\<ключ>]RegEdit.exe /e файл HKEY_USERS[\<ключ>]
экспортировать только указанный (под)ключ (который должен быть заключен в кавычки, если он содержит пробелы).
RegEdit.exe / файл
экспортирует весь реестр в формате V4 в .REG
файл ANSI.
RegEdit.exe /a файл <ключ>
экспортирует только указанный (под)ключ (который должен быть заключен в кавычки, если он содержит пробелы).
Также можно использовать Reg.exe
. Вот пример отображения значения параметра реестра Version:
Reg.exe ЗАПРОС HKLM\Software\Microsoft\ResKit /v Версия
Другие параметры командной строки включают VBScript или JScript вместе с CScript , WMI или WindowsWMIC.exe
PowerShell .
Разрешения реестра можно изменять через командную строку с помощью RegIni.exe
и SubInACL.exe
инструмента. Например, разрешения на ключ HKEY_LOCAL_MACHINE\SOFTWARE можно отобразить с помощью:
SubInACL.exe /keyreg HKEY_LOCAL_MACHINE\SOFTWARE /display
Windows PowerShell поставляется с поставщиком реестра, который представляет реестр как тип расположения, аналогичный файловой системе. Те же команды, которые используются для управления файлами и каталогами в файловой системе, могут использоваться для управления ключами и значениями реестра. [28]
Также как и файловая система, PowerShell использует концепцию текущего местоположения , которая определяет контекст, в котором по умолчанию работают команды. Get-ChildItem
(также доступно через псевдонимы ls
, dir
или gci
) извлекает дочерние ключи текущего местоположения. Используя команду Set-Location
(или псевдоним cd
), пользователь может изменить текущее местоположение на другой ключ реестра. [28] Команды, которые переименовывают элементы, удаляют элементы, создают новые элементы или устанавливают содержимое элементов или свойств, могут использоваться для переименования ключей, удаления ключей или целых поддеревьев или изменения значений.
С помощью файлов сценариев PowerShell администратор может подготовить сценарии, которые при выполнении вносят изменения в реестр. Такие сценарии могут быть распространены среди администраторов, которые могут выполнять их на отдельных машинах. Поставщик PowerShell Registry поддерживает транзакции, то есть несколько изменений в реестре могут быть объединены в одну атомарную транзакцию. Атомарная транзакция гарантирует, что либо все изменения будут зафиксированы в базе данных, либо, если сценарий не сработает, ни одно из изменений не будет зафиксировано в базе данных. [28] [29]
Реестр можно редактировать через API библиотеки Advanced Windows 32 Base API (advapi32.dll). [30] Список функций API реестра:
Многие языки программирования предлагают встроенные функции или классы библиотеки времени выполнения , которые оборачивали базовые API Windows и тем самым позволяли программам сохранять настройки в реестре (например, в VB.NET и C# или в Delphi и Free Pascal ). Приложения с поддержкой COM , такие как Visual Basic 6, могут использовать объект WSH . Другой способ — использовать Windows Resource Kit Tool, выполняя его из кода, [31], хотя это считается плохой практикой программирования.Microsoft.Win32.Registry
TRegistry
WScript.Shell
Reg.exe
Аналогично, такие языки сценариев, как Perl (с Win32::TieRegistry
), Python (с winreg), TCL (который поставляется в комплекте с пакетом реестра), [32] Windows Powershell и Windows Scripting Host также позволяют редактировать реестр из скриптов.
Файл offreg.dll [33], доступный в комплекте драйверов Windows, предлагает набор API для создания и обработки не загруженных в данный момент кустов реестра, аналогичных тем, которые предоставляет advapi32.dll.
Также возможно редактировать реестр (кусты) автономной системы из Windows PE или Linux (в последнем случае с использованием инструментов с открытым исходным кодом ).
До введения COM без регистрации разработчикам предлагалось добавлять код инициализации в двоичные файлы in-process и out-of-process для выполнения конфигурации реестра, необходимой для работы этого объекта. Для двоичных файлов in-process, таких как файлы .DLL и .OCX, модули обычно экспортировали функцию DllInstall() [34] , которую можно было вызывать программами установки или вручную с помощью утилит, таких как Regsvr32.exe; [35] двоичные файлы out-of-process обычно поддерживают аргументы командной строки /Regserver и /Unregserver, которые создавали или удаляли требуемые параметры реестра. [36] Приложения COM, которые выходят из строя из-за проблем DLL Hell , обычно можно восстановить с помощью RegSvr32.exe или переключателя /RegServer без необходимости повторного вызова программ установки. [37]
Windows предоставляет API, которые позволяют приложениям пользовательского режима регистрироваться для получения уведомлений об изменении определенного ключа реестра. [38] Также доступны API, позволяющие приложениям режима ядра фильтровать и изменять вызовы реестра, выполняемые другими приложениями. [39]
Windows также поддерживает удаленный доступ к реестру другого компьютера через RegConnectRegistry
функцию [40] , если служба удаленного реестра запущена, правильно настроена и ее сетевой трафик не защищен брандмауэром. [41]
Каждый ключ в реестре версий Windows NT может иметь связанный с ним дескриптор безопасности . Дескриптор безопасности содержит список управления доступом (ACL) , который описывает, каким группам пользователей или отдельным пользователям предоставлены или запрещены разрешения на доступ. Набор разрешений реестра включает 10 прав/разрешений, которые могут быть явно разрешены или запрещены пользователю или группе пользователей.
Как и в случае с другими защищаемыми объектами в операционной системе, отдельные записи управления доступом (ACE) в дескрипторе безопасности могут быть явными или унаследованными от родительского объекта. [42]
Защита ресурсов Windows — это функция Windows Vista и более поздних версий Windows, которая использует систему безопасности для запрета администраторам и системе доступа WRET к некоторым конфиденциальным ключам с целью защиты целостности системы от вредоносных программ и случайных изменений. [43]
Специальные ACE в дескрипторе безопасности также могут реализовывать обязательный контроль целостности для раздела реестра и подразделов. Процесс, работающий на более низком уровне целостности, не может записывать, изменять или удалять раздел/значение реестра, даже если учетной записи процесса был предоставлен доступ через ACL. Например, Internet Explorer, работающий в защищенном режиме, может читать разделы/значения реестра средней и низкой целостности текущего вошедшего в систему пользователя, но он может изменять только ключи низкой целостности. [44]
За пределами безопасности ключи реестра не могут быть удалены или отредактированы по другим причинам. Ключи реестра, содержащие символы NUL, не могут быть удалены стандартными редакторами реестра и требуют специальной утилиты для удаления, например RegDelNull. [45] [46]
На протяжении многих лет различные редакции Windows поддерживали ряд различных методов резервного копирования и восстановления реестра, некоторые из которых сейчас устарели:
HKLM\SYSTEM\CurrentControlSet
ключ, в котором хранится информация об оборудовании и драйверах устройств.%Windir%\Sysbckup
Scanreg.exe, который также может быть запущен из MS-DOS . [48]RDISK.EXE
входит утилита для резервного копирования и восстановления всего реестра. [49]Windows 2000 и более поздние версии Windows используют групповую политику для принудительного применения параметров реестра с помощью клиентского расширения реестра в механизме обработки групповой политики. [52] Политика может быть применена локально к одному компьютеру с помощью gpedit.msc
или к нескольким пользователям и компьютерам в домене с помощью gpmc.msc
.
В Windows 95, Windows 98, Windows ME и Windows NT 4.0 администраторы могут использовать специальный файл для объединения с реестром, называемый файлом политики ( POLICY.POL
). Файл политики позволяет администраторам запрещать пользователям, не являющимся администраторами, изменять параметры реестра, например, уровень безопасности Internet Explorer и фоновый рисунок рабочего стола. Файл политики в основном используется в бизнесе с большим количеством компьютеров, где бизнес должен быть защищен от мошенников или неосторожных пользователей.
Расширение по умолчанию для файла политики — .POL
. Файл политики фильтрует применяемые им настройки по пользователю и группе («группа» — это определенный набор пользователей). Для этого файл политики объединяется с реестром, не позволяя пользователям обойти его, просто вернув настройки обратно. Файл политики обычно распространяется по локальной сети, но может быть размещен на локальном компьютере.
Файл политики создается бесплатным инструментом Microsoft, который называется filename poledit.exe
для Windows 95/Windows 98 и имеет модуль управления компьютером для Windows NT. Редактор требует административных разрешений для запуска в системах, использующих разрешения. Редактор также может напрямую изменять текущие параметры реестра локального компьютера, и если удаленная служба реестра установлена и запущена на другом компьютере, он также может изменять реестр на этом компьютере. Редактор политики загружает параметры, которые он может изменить, из .ADM
файлов, один из которых включен, содержащий параметры, предоставляемые оболочкой Windows. Файл .ADM
представляет собой простой текст и поддерживает простую локализацию, позволяя хранить все строки в одном месте.
Ядра Windows NT поддерживают перенаправление API , связанных с файлами INI, в виртуальный файл в реестре, например, HKEY_CURRENT_USER, с помощью функции под названием «InifileMapping». [53] Эта функциональность была введена для того, чтобы позволить устаревшим приложениям, написанным для 16-разрядных версий Windows, работать на платформах Windows NT, на которых папка System больше не считается подходящим местом для пользовательских данных или конфигурации. Несовместимые 32-разрядные приложения также могут быть перенаправлены таким образом, хотя изначально эта функция предназначалась для 16-разрядных приложений.
В Windows Vista реализована ограниченная виртуализация реестра, при которой плохо написанные приложения, не соблюдающие принцип наименьших привилегий и пытающиеся вместо этого записывать пользовательские данные в системное местоположение, доступное только для чтения (например, в куст HKEY_LOCAL_MACHINE), автоматически перенаправляются в более подходящее местоположение, не изменяя само приложение.
Аналогично, виртуализация приложений перенаправляет все недействительные операции реестра приложения в местоположение, например, файл. При использовании вместе с виртуализацией файлов это позволяет приложениям работать на машине, не будучи установленными на ней.
Процессы с низкой степенью целостности также могут использовать виртуализацию реестра. Например, Internet Explorer 7 или 8, работающий в «защищенном режиме» на Windows Vista и выше, автоматически перенаправляет записи в реестр элементами управления ActiveX в изолированное местоположение, чтобы помешать некоторым классам эксплойтов безопасности .
Набор инструментов для обеспечения совместимости приложений [54] предоставляет оболочки , которые могут прозрачно перенаправлять операции реестра HKEY_LOCAL_MACHINE или HKEY_CLASSES_ROOT в HKEY_CURRENT_USER для устранения ошибок « LUA », из-за которых приложения не работают у пользователей с недостаточными правами.
Критики назвали реестр в Windows 95 единой точкой отказа , поскольку при повреждении реестра требовалась переустановка операционной системы. Однако Windows NT использует журналы транзакций для защиты от повреждения во время обновлений. Текущие версии Windows используют два уровня файлов журналов для обеспечения целостности даже в случае сбоя питания или подобных катастрофических событий во время обновлений базы данных. [55] Даже в случае неустранимой ошибки Windows может восстановить или повторно инициализировать поврежденные записи реестра во время загрузки системы. [55]
В Windows использование реестра для хранения данных программы является вопросом усмотрения разработчика. Microsoft предоставляет программные интерфейсы для хранения данных в XML- файлах (через MSXML ) или файлах баз данных (через SQL Server Compact ), которые разработчики могут использовать вместо этого. Разработчики также могут свободно использовать альтернативы, не принадлежащие Microsoft, или разрабатывать собственные хранилища данных.
В отличие от двоичной модели базы данных реестра Windows, некоторые другие операционные системы используют отдельные текстовые файлы для конфигурации демона и приложения, но группируют эти конфигурации вместе для удобства управления.
/etc/
и его подкаталогах, а иногда и в /usr/local/etc/
. Информация для каждого пользователя (информация, которая примерно эквивалентна информации в HKEY_CURRENT_USER) хранится в скрытых каталогах и файлах (которые начинаются с точки/ точки ) в домашнем каталоге пользователя . Однако приложения, совместимые с XDG, должны ссылаться на переменные среды, определенные в спецификации Base Directory. [56]/Library/
папке , тогда как пользовательские файлы конфигурации хранятся в соответствующей ~/Library/
папке в домашнем каталоге пользователя, а файлы конфигурации, заданные системой, находятся в /System/Library/
. Внутри этих соответствующих каталогов приложение обычно хранит файл списка свойств в Preferences/
подкаталоге ./etc/objrepos
.следующей таблице показаны другие трудности или ограничения, вызванные использованием файлов .INI, которые преодолеваются с помощью реестра.
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка )