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


Отражение реестра

[Сведения в этом разделе относятся к Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP. Начиная с Windows 7 и Windows Server 2008 R2, WOW64 больше не использует отражение реестра и прежнее отражение ключей используются совместно. Дополнительные сведения см. в разделах реестра , затронутыхWOW64 .]

Средство перенаправления реестра изолирует 32-разрядные и 64-разрядные приложения, предоставляя отдельные логические представления определенных частей реестра в WOW64. Однако значения некоторых разделов реестра должны совпадать как в 32-разрядных, так и в 64-разрядных представлениях.

Процесс отражения реестра копирует разделы реестра и значения между двумя представлениями реестра, чтобы обеспечить их синхронизацию. Каждое представление содержит отдельную физическую копию каждого отражаемого раздела реестра, один для 32-разрядного представления реестра и другого для 64-разрядного представления реестра.

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

Отражатель копирует данные активации COM для локальных серверов между представлениями, но не копирует данные в процессе, так как 32/64 в процессе смешивания данных не разрешено в 64-разрядной версии Windows.

Отражение не включено для общих разделов реестра или для разделов реестра, которые не перенаправляются. Например, отражение не включено для ключа HKEY_LOCAL_MACHINE\System. Список разделов реестра, которые перенаправлены, общие или отражены, см. в разделе разделы реестра, затронутыеWOW64.

Отражение реестра использует политику "последняя победа записи", как показано в следующем примере:

  • После чистой установки 64-разрядной версии Windows 64-разрядная Wordpad.exe регистрируется для обработки .doc файлов. Отражатель копирует регистрацию .doc из 64-разрядного представления реестра в 32-разрядное представление реестра.
  • Администратор устанавливает 32-разрядную версию Office, которая регистрирует 32-разрядную Winword.exe для обработки .doc файлов в 32-разрядном представлении реестра. Отражатель реестра копирует эти сведения в 64-разрядное представление реестра, поэтому 32-разрядные и 64-разрядные приложения запускают 32-разрядную версию Winword.exe для .doc файлов.
  • Администратор устанавливает 64-разрядную версию Office, которая регистрирует 64-разрядную Winword.exe для обработки .doc файлов в 64-разрядном представлении реестра. Рефлектор реестра копирует эти сведения в 32-разрядный реестр, поэтому 32-разрядные и 64-разрядные приложения запускают 64-разрядную версию Winword.exe для .doc файлов.

Таким образом, сведения о сопоставлении файлов сохраняются для последнего установленного приложения.

Это может быть полезно для 32-разрядных и 64-разрядных приложений для совместного использования определенных значений разделов реестра, которые обычно записываются в отдельные представления реестра. Например, 32-разрядный сервер OLE, который может обслуживать запросы от 32-разрядных и 64-разрядных клиентов, может сделать 32-разрядные данные реестра доступными для 64-разрядного представления системного реестра.

Когда компонент записывает данные в системный реестр, WOW64 анализирует сведения и делает копию данных в альтернативном представлении реестра при необходимости. Как правило, этот процесс сохраняет две отдельные физические копии одного и того же раздела реестра в обоих представлениях в реестре, и называется отражением реестра или зеркальным отображением реестра.

Большинство ключей в корневом каталоге классов находятся в этой категории. Обновления ключей отражаются при завершении обновления и закрытии дескриптора ключа. В определенных случаях запись в ключ не отражается, если ключ имеет некоторую зависимость битности. Например, 32-разрядный ключ InprocServer32 не относится к 64-разрядным приложениям, поэтому ключ InprocServer32 не отражается на 64-разрядном представлении реестра. Однако 64-разрядные приложения могут использовать 32-разрядный ключ LocalServer32, а ключ LocalServer32 отражается.

Для HKEY_LOCAL_MACHINE\Software\Classes\CLSID и HKEY_CURRENT_USER\Software\Classes\CLSIDотражаются только CLSID, которые не указывают InprocServer32 или InprocHandler32. Отражаются только clSID LocalServer32, так как они выполняются вне процесса и могут быть активированы 32-разрядными или 64-разрядными приложениями. ClSID InProcServer32 не отражаются, так как невозможно загрузить 32-разрядную библиотеку DLL для выполнения в 64-разрядном процессе или 64-разрядную библиотеку DLL для выполнения в 32-разрядном процессе.

Для HKEY_LOCAL_MACHINE\Software\Classes\Appid и HKEY_CURRENT_USER\Software\Classes\Appidзначения реестра DllSurrogate и DllSurrogateExecut able не отражаются, если их значение является пустой строкой.

Чтобы отключить и включить отражение реестра для определенного отраженного ключа, используйте функции RegDisableReflectionKey и RegEnableReflectionKey. Эти функции не влияют на ключи, которые не находятся в списке отраженных ключей ранее в этом разделе. Приложения должны отключить отражение только для созданных разделов реестра и не пытаться отключить отражение для предопределенных ключей, таких как HKEY_LOCAL_MACHINE или HKEY_CURRENT_USER. Чтобы определить, отключены ли ключи в списке отражения, используйте функцию RegQueryReflectionKey.

Отраженные ключи не должны использоваться в операциях с транзакцией реестра. Запись в отраженные ключи во время транзакции может привести к сбою транзакции. Дополнительные сведения о транзакциях см. в диспетчере транзакций ядра.

перенаправления реестра

отражение реестра в Windows

разделы реестра , затронутые WOW64