Поделиться через


Виртуализация реестра

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

Эта форма виртуализации — это промежуточная технология совместимости приложений; Корпорация Майкрософт намерена удалить ее из будущих версий операционной системы Windows, так как больше приложений совместимы с Windows Vista и более поздними версиями Windows. Поэтому важно, чтобы приложение не зависел от поведения виртуализации реестра в системе.

Виртуализация предназначена только для обеспечения совместимости существующих приложений. Приложения, предназначенные для Windows Vista и более поздних версий Windows, не должны записывать данные в конфиденциальные системные области и не должны полагаться на виртуализацию для устранения проблем. При обновлении существующего кода для запуска в Windows Vista и более поздних версиях Windows разработчики должны гарантировать, что приложения хранят только данные в расположениях для каждого пользователя или в расположениях компьютеров в %alluserprofile%, которые правильно используют список управления доступом (ACL).

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

Обзор виртуализации

До Windows Vista приложения обычно выполняются администраторами. В результате приложения могут свободно получать доступ к системным файлам и разделам реестра. Если эти приложения выполняются стандартным пользователем, они завершаются ошибкой из-за нехватки прав доступа. Windows Vista и более поздние версии Windows повышают совместимость приложений для этих приложений, автоматически перенаправляя эти операции. Например, операции реестра в глобальном хранилище (HKEY_LOCAL_MACHINE\Software) перенаправляются в расположение пользователя в профиле пользователя, известном как виртуального хранилища (HKEY_USERS\<идентификатор безопасности пользователя>_Classes\VirtualStore\Machine\Software).

Виртуализация реестра может быть широко классифицирована по следующим типам:

виртуализация открытого реестра

Если вызывающий объект не имеет доступа на запись к ключу и пытается открыть ключ, ключ открывается с максимальным допустимым доступом для этого вызывающего объекта.

Если для ключа задан флаг REG_KEY_DONT_SILENT_FAIL, операция завершается ошибкой, и ключ не открывается. Дополнительные сведения см. в разделе "Управление виртуализацией реестра" далее в этом разделе.

виртуализация реестра

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

Например, если ограниченный пользователь пытается написать значение в следующий ключ: HKEY_LOCAL_MACHINE\Software\AppKey1, виртуализация перенаправляет операцию записи на HKEY_USERS\<идентификатор безопасности пользователя>_Classes\VirtualStore\Machine\Software\AppKey1.

виртуализация реестра чтения

Если вызывающий объект считывает из ключа, виртуализированного, реестр представляет объединенное представление как виртуализированных значений (из виртуального хранилища), так и не виртуальных значений (из глобального хранилища) вызывающей стороне.

Например, предположим, что HKEY_LOCAL_MACHINE\Software\AppKey1 содержит два значения версии 1 и V2, а ограниченный пользователь записывает значение версии 3 в ключ. Когда пользователь пытается считывать значения из этого ключа, объединенное представление включает значения версии 1 и V2 из глобального хранилища и значения V3 из виртуального хранилища.

Обратите внимание, что виртуальные значения имеют приоритет над глобальными значениями при наличии. В приведенном выше примере, даже если в глобальном хранилище было значение версии 3 под этим ключом, значение версии 3 по-прежнему будет возвращено вызывающему объекту из виртуального хранилища. Если бы v3 было удалено из виртуального хранилища, то версия 3 будет возвращена из глобального хранилища. Другими словами, если версия 3 должна быть удалена из HKEY_USERS\<идентификатор безопасности пользователя>_Classes\VirtualStore\Machine\Software\AppKey1, но HKEY_LOCAL_MACHINE\Software\AppKey1 было значение V3, то это значение будет возвращено из глобального хранилища.

Область виртуализации реестра

Виртуализация реестра включена только для следующих вариантов:

  • 32-разрядные интерактивные процессы.
  • Ключи в HKEY_LOCAL_MACHINE\Software.
  • Ключи, в которые администратор может написать. (Если администратор не может написать ключ, приложение завершилось сбоем в предыдущих версиях Windows, даже если он был запущен администратором.)

Виртуализация реестра отключена для следующих действий.

  • 64-разрядные процессы.

  • Процессы, которые не являются интерактивными, например службами.

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

  • Процессы, олицетворяющие пользователя. Если процесс пытается выполнить операцию при олицетворении пользователя, эта операция не будет виртуализирована.

  • Процессы в режиме ядра, такие как драйверы.

  • Процессы, которые запрошеныExecutionLevel, указанные в их манифестах.

  • Ключи и подразделы HKEY_LOCAL_MACHINE\Software\Classes, HKEY_LOCAL_MACHINE\Software\Microsoft\Windowsи HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT.

Управление виртуализацией реестра

Помимо управления виртуализацией на уровне приложения с помощью запрошенной ExecutionLevel в манифесте администратор может включить или отключить виртуализацию на основе ключей в HKEY_LOCAL_MACHINE\Software. Для этого используйте параметр ФЛАГИ флагов командной строки Reg.exe с флагами, перечисленными в следующей таблице.

Флаг Значение
REG_KEY_DONT_SILENT_FAIL Этот флаг отключает виртуализацию открытого реестра. Если этот флаг задан, а открытая операция завершается сбоем ключа, включаемого виртуализацией, реестр не пытается повторно открыть ключ. Если этот флаг снят, реестр пытается повторно открыть ключ с MAXIMUM_ALLOWED доступом вместо запрошенного доступа.
REG_KEY_DONT_VIRTUALIZE Этот флаг отключает виртуализацию реестра записи. Если этот флаг задан и операция создания ключа или задания значения завершается сбоем, так как вызывающий объект не имеет достаточного доступа к родительскому разделу, реестр завершается ошибкой. Если этот флаг снят, реестр пытается записать ключ или значение в виртуальном хранилище. Вызывающий объект должен иметь KEY_READ право на родительский ключ.
REG_KEY_RECURSE_FLAG Если этот флаг задан, флаги виртуализации реестра распространяются из родительского ключа. Если этот флаг снят, флаги виртуализации реестра не распространяются. Изменение этого флага влияет только на новые ключи-потомки, созданные после изменения флага. Он не задает или не очищает эти флаги для существующих ключей потомков.

 

В следующем примере показано использование служебной программы командной строки Reg.exe с параметром FLAGS для запроса состояния флагов виртуализации для ключа.

C:\>reg flags HKLM\Software\AppKey1 QUERY

HKEY_LOCAL_MACHINE\Software\AppKey1

        REG_KEY_DONT_VIRTUALIZE: CLEAR
        REG_KEY_DONT_SILENT_FAIL: CLEAR
        REG_KEY_RECURSE_FLAG: CLEAR

The operation completed successfully.

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

начало работы с управлением учетными записями пользователей

Понимание и настройка управления учетными записями пользователей

рекомендации разработчика и рекомендации по приложениям в наименее привилегированной среде