Перенаправление реестра
Средство перенаправления реестра изолирует 32-разрядные и 64-разрядные приложения, предоставляя отдельные логические представления определенных частей реестра в WOW64. Средство перенаправления реестра перехватывает 32-разрядные и 64-разрядные вызовы реестра к соответствующим представлениям логического реестра и сопоставляет их с соответствующим расположением физического реестра. Процесс перенаправления является прозрачным для приложения. Поэтому 32-разрядное приложение может получить доступ к данным реестра, как если бы он работал в 32-разрядной Windows, даже если данные хранятся в другом расположении в 64-разрядной Windows.
Windows 10 в ARM: помимо 32-разрядного логического представления для приложений x86, Windows 10 в ARM включает отдельное логическое представление для 32-разрядных приложений ARM.
Подмножество разделов под перенаправленными путями реестра предоставляется совместно. 32-разрядные вызовы реестра к общим ключам не перенаправляются. Вместо этого одна физическая копия ключа сопоставляется с каждым логическим представлением реестра. Список перенаправленных ключей и общих ключей см. в разделе разделы реестра, затронутыеWOW64.
Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Для обеспечения взаимодействия приложений с помощью COM и других механизмов подмножество перенаправленных разделов реестра также отражены. Процесс отражения реестра копирует разделы реестра и значения между двумя представлениями реестра, чтобы обеспечить их синхронизацию. Отражение реестра было удалено начиная с Windows 7 и Windows Server 2008 R2. Дополнительные сведения см. в отражения реестра.
Следующий сценарий иллюстрирует использование этих логических представлений:
- 32-разрядное приложение x86 проверяет наличие следующего раздела реестра: HKEY_LOCAL_MACHINE\Software\Hello. Если ключ не существует, приложение создает его со значением по умолчанию "Hello 32-bit x86 world"; в противном случае он считывает и отображает значение.
- То же приложение изменено, чтобы написать "Hello 64-разрядный мир" вместо "Hello 32-разрядный x86 world" и перекомпилироваться как 64-разрядное приложение x64 или ARM64.
- Windows 10 в ARM: То же приложение изменено, чтобы написать "Hello 32-разрядный мир ARM" и перекомпилировать как 32-разрядное приложение ARM.
- Когда 32-разрядное приложение x86 запущено в 64-разрядной версии Windows, оно отображает "Hello 32-разрядный мир x86". При запуске 64-разрядного приложения отображается сообщение Hello 64-разрядного мира. Windows 10 в ARM: Когда 32-разрядное приложение ARM запущено в 64-разрядной версии Arm64 Windows, оно отображает "Hello 32-разрядный мир ARM". Все приложения вызывают одни и те же функции реестра с одинаковым предопределенным дескриптором и одинаковым именем ключа; Разница заключается в том, что каждое приложение работает с его логическим представлением реестра, и каждое представление сопоставляется с отдельным физическим расположением реестра, которое сохраняет все версии строки без изменений.
Перенаправленные ключи сопоставляются с физическими расположениями в Wow6432Node. Например, HKEY_LOCAL_MACHINE\Software перенаправляется в HKEY_LOCAL_MACHINE\Software\Wow6432Node. Однако физическое расположение перенаправленных ключей должно считаться зарезервированным системой. Приложения не должны напрямую обращаться к физическому расположению ключа, так как это расположение может измениться. Дополнительные сведения см. в разделе доступ к альтернативному представлению реестра.
Windows 10 в ARM: перенаправленные 32-разрядные ключи ARM сопоставляются с физическими расположениями в WowAA32Node.
Чтобы помочь 32-разрядным приложениям, которые записывают REG_SZ или REG_EXPAND_SZ данные, содержащие %ProgramFiles% или %commonprogramfiles% в реестр, WOW64 перехватывает эти операции записи и заменяет их на "%ProgramFiles(x86)%" и "%commonprogramfiles(x86)%". Например, если каталог Program Files находится на диске C,%ProgramFiles(x86)%" разворачивается до "C:\Program Files (x86)". Замена происходит только в том случае, если выполнены следующие условия:
- Строка должна начинаться с %ProgramFiles% или %commonprogramfiles%. Если строка начинается с пробела или любого символа, отличного от %, он не заменяется.
- Регистр %ProgramFiles% или %commonprogramfiles% должен быть точно так же, как показано, так как сравнение строк учитывает регистр. Например, если строка начинается с %CommonProgramFiles% вместо %commonprogramfiles%, она не заменена.
- Строка не может превышать MAX_PATH*2+15 символов. Если она превышает эту длину, она не заменена.
- Ключ нельзя открыть с помощью KEY_WOW64_64KEY. Этот флаг указывает, что операции с ключом должны выполняться в 64-разрядном представлении реестра, поэтому он не заменен. Дополнительные сведения см. в разделе доступ к альтернативному представлению реестра.
Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: флаг KEY_WOW_64_64KEY не влияет на то, заменяется ли ключ. Этот флаг влияет на замену, начиная с Windows 7 и Windows Server 2008 R2.
Кроме того, REG_SZ или REG_EXPAND_SZ ключи, содержащие system32, заменяются syswow64. Строка должна начинаться с пути, указывающего на %windir%\system32. Сравнение строк не учитывает регистр. Переменные среды развертываются перед сопоставлением пути, поэтому все следующие пути заменяются: %windir%\system32, %SystemRoot%\system32 и C:\windows\system32. Это исправление применяется только к ключам, которые были отражены до Windows 7.
Дополнительные сведения см. в следующих разделах:
- отражения реестра
- разделы реестра , затронутые WOW64
- доступ к альтернативному представлению реестра
- пример перенаправления реестра в WOW64
- удаленный доступ к реестру в 64-разрядной версии Windows