Przekierowanie rejestru
Przekierowanie rejestru izoluje aplikacje 32-bitowe i 64-bitowe, zapewniając oddzielne widoki logiczne niektórych części rejestru w usłudze WOW64. Przekierowanie rejestru przechwytuje 32-bitowe i 64-bitowe wywołania rejestru do odpowiednich widoków rejestru logicznego i mapuje je na odpowiednią lokalizację rejestru fizycznego. Proces przekierowywania jest niewidoczny dla aplikacji. W związku z tym aplikacja 32-bitowa może uzyskać dostęp do danych rejestru tak, jakby była uruchomiona w 32-bitowym systemie Windows, nawet jeśli dane są przechowywane w innej lokalizacji w 64-bitowym systemie Windows.
windows 10 w usłudze ARM: Oprócz 32-bitowego widoku logicznego dla aplikacji x86 system Windows 10 w usłudze ARM zawiera oddzielny widok logiczny dla 32-bitowych aplikacji ARM.
Współużytkowany jest podzbiór kluczy w ramach przekierowanych ścieżek rejestru. 32-bitowe wywołania rejestru do kluczy udostępnionych nie są przekierowywane. Zamiast tego jedna fizyczna kopia klucza jest mapowana na każdy logiczny widok rejestru. Aby uzyskać listę przekierowanych kluczy i kluczy udostępnionych, zobacz Klucze rejestru, których dotyczyWOW64.
Windows Server 2008, Windows Vista, Windows Server 2003 i Windows XP: Aby umożliwić współdziałanie aplikacji za pośrednictwem modelu COM i innych mechanizmów, podzestaw przekierowanych kluczy rejestru również odzwierciedlane. Proces odbicia rejestru kopiuje klucze rejestru i wartości między dwoma widokami rejestru, aby zachować ich synchronizację. Odbicie rejestru zostało usunięte, począwszy od systemów Windows 7 i Windows Server 2008 R2. Aby uzyskać więcej informacji, zobacz odbicia rejestru.
W poniższym scenariuszu przedstawiono użycie tych widoków logicznych:
- 32-bitowa aplikacja x86 sprawdza istnienie następującego klucza rejestru: HKEY_LOCAL_MACHINE\Software\Hello. Jeśli klucz nie istnieje, aplikacja tworzy ją z wartością domyślną "Hello 32-bitowy świat x86"; w przeciwnym razie odczytuje i wyświetla wartość.
- Ta sama aplikacja jest modyfikowana w celu zapisu "Hello 64-bit world" zamiast "Hello 32-bitowy świat x86" i ponownie skompilowana jako 64-bitowa aplikacja x64 lub ARM64.
- systemu Windows 10 w usłudze ARM: Ta sama aplikacja została zmodyfikowana w celu zapisania "Hello 32-bitowego świata ARM" i ponownego skompilowania jako 32-bitowej aplikacji ARM.
- Po uruchomieniu 32-bitowej aplikacji x86 w 64-bitowym systemie Windows zostanie wyświetlony komunikat "Hello 32-bitowy świat x86". Po uruchomieniu 64-bitowej aplikacji zostanie wyświetlona wartość "Hello 64-bit world". systemu Windows 10 w usłudze ARM: Gdy 32-bitowa aplikacja ARM jest uruchamiana w 64-bitowym systemie WINDOWS ARM, wyświetla komunikat "Hello 32-bitowy świat arm". Wszystkie aplikacje wywołają te same funkcje rejestru z tym samym wstępnie zdefiniowanym uchwytem i tą samą nazwą klucza; Różnica polega na tym, że każda aplikacja działa w logicznym widoku rejestru, a każdy widok jest mapowany na oddzielną fizyczną lokalizację rejestru, która przechowuje wszystkie wersje ciągu bez zmian.
Przekierowane klucze są mapowane na lokalizacje fizyczne w Wow6432Node. Na przykład HKEY_LOCAL_MACHINE\Software jest przekierowywany do HKEY_LOCAL_MACHINE\Software\Wow6432Node. Jednak fizyczna lokalizacja przekierowanych kluczy powinna być uważana za zarezerwowaną przez system. Aplikacje nie powinny uzyskiwać bezpośredniego dostępu do lokalizacji fizycznej klucza, ponieważ ta lokalizacja może ulec zmianie. Aby uzyskać więcej informacji, zobacz Uzyskiwanie dostępu do widoku rejestru alternatywnego.
systemu Windows 10 w usłudze ARM: Przekierowane 32-bitowe klucze ARM są mapowane na lokalizacje fizyczne w obszarze WowAA32Node.
Aby ułatwić 32-bitowe aplikacje, które zapisują dane REG_SZ lub REG_EXPAND_SZ zawierające %ProgramFiles% lub %commonprogramfiles% do rejestru, usługa WOW64 przechwytuje te operacje zapisu i zastępuje je%ProgramFiles(x86)%" i "%commonprogramfiles(x86)%". Jeśli na przykład katalog Program Files znajduje się na dysku C,%ProgramFiles(x86)%" rozwija się do "C:\Program Files (x86)". Zastąpienie występuje tylko wtedy, gdy spełnione są następujące warunki:
- Ciąg musi zaczynać się od %ProgramFiles% lub %commonprogramfiles%. Jeśli ciąg zaczyna się od spacji lub dowolnego znaku innego niż %, nie zostanie zamieniony.
- Wielkość liter %ProgramFiles% lub %commonprogramfiles% musi być dokładnie tak jak pokazano, ponieważ porównanie ciągów jest uwzględniane w wielkości liter. Jeśli na przykład ciąg zaczyna się od %CommonProgramFiles% zamiast %commonprogramfiles%, nie jest zastępowany.
- Ciąg nie może przekraczać MAX_PATH*2+15 znaków. Jeśli przekroczy tę długość, nie zostanie zamieniony.
- Nie można otworzyć klucza przy użyciu KEY_WOW64_64KEY. Ta flaga określa, że operacje na kluczu powinny być wykonywane w widoku rejestru 64-bitowego, więc nie jest zastępowany. Aby uzyskać więcej informacji, zobacz Uzyskiwanie dostępu do widoku rejestru alternatywnego.
Windows Server 2008, Windows Vista, Windows Server 2003 i Windows XP: flaga KEY_WOW_64_64KEY nie ma wpływu na to, czy klucz jest zastępowany. Ta flaga wpływa na zastąpienie począwszy od systemów Windows 7 i Windows Server 2008 R2.
Ponadto klucze REG_SZ lub REG_EXPAND_SZ zawierające system32 są zastępowane ciągiem syswow64. Ciąg musi zaczynać się od ścieżki wskazującej lub w obszarze %windir%\system32. Porównanie ciągów nie uwzględnia wielkości liter. Zmienne środowiskowe są rozwinięte przed dopasowaniem ścieżki, więc wszystkie następujące ścieżki są zastępowane: %windir%\system32, %SystemRoot%\system32 i C:\windows\system32. Ta poprawka jest stosowana tylko do kluczy, które zostały odzwierciedlone przed systemem Windows 7.
Aby uzyskać więcej informacji, zobacz następujące tematy:
- odbicia rejestru
- klucze rejestru, których dotyczy WOW64
- uzyskiwanie dostępu do alternatywnego widoku rejestru
- przykład przekierowania rejestru w usłudze WOW64
- dostęp do rejestru zdalnego w 64-bitowym systemie Windows