登錄重新導向器

登錄重新導向器會藉由在 WOW64 上提供登錄特定部分的個別邏輯檢視,來隔離 32 位和 64 位應用程式。 登錄重新導向器會攔截其個別邏輯登錄檢視的 32 位和 64 位登錄呼叫,並將其對應至對應的實體登錄位置。 重新導向程式對應用程式而言是透明的。 因此,即使資料儲存在 64 位 Windows 上的不同位置,32 位應用程式也可以存取登錄資料,就像是在 32 位 Windows 上執行一樣。

在 ARM 上Windows 10:除了 x86 應用程式的 32 位邏輯檢視之外,ARM 上的Windows 10還包含 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 位 x86 world」 建立它;否則,它會讀取並顯示值。
  • 相同的應用程式會修改為寫入 「Hello 64 位 world」,而不是 「Hello 32 位 x86 world」,並重新編譯為 64 位 x64 或 ARM64 應用程式。
  • 在 ARM 上Windows 10:修改相同的應用程式以撰寫 「Hello 32 位 ARM world」,並重新編譯為 32 位 ARM 應用程式。
  • 當 32 位 x86 應用程式在 64 位 Windows 上執行時,會顯示 「Hello 32 位 x86 world」。 執行 64 位應用程式時,會顯示 「Hello 64 位世界」。 在 ARM 上Windows 10:當 32 位 ARM 應用程式在 64 位 ARM64 Windows 上執行時,會顯示 「Hello 32 位 ARM world」。 所有應用程式都會呼叫具有相同預先定義控制碼和相同機碼名稱的相同登錄函式;差異在於每個應用程式都會在其登錄的邏輯檢視上運作,而每個檢視都會對應至登錄的個別實體位置,這會讓所有版本的字串保持不變。

重新導向的金鑰會對應至 Wow6432Node下的實體位置。 例如, HKEY_LOCAL_MACHINE\Software 會重新導向至 HKEY_LOCAL_MACHINE\Software\Wow6432Node。 不過,系統應該將重新導向金鑰的實體位置視為保留。 應用程式不應該直接存取金鑰的實體位置,因為這個位置可能會變更。 如需詳細資訊,請參閱 存取替代登錄檢視

在 ARM 上Windows 10:重新導向的 32 位 ARM 金鑰會對應至 WowAA32Node 下的實體位置。

為了協助將 REG_SZREG_EXPAND_SZ 包含 %ProgramFiles% 或 %commonprogramfiles% 的資料寫入登錄的 32 位應用程式,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 開始的取代。

此外,包含 system32 的REG_SZ或REG_EXPAND_SZ索引鍵會取代為 syswow64。 字串的開頭必須是指向 %windir%\system32 或下方的路徑。 字串比較不區分大小寫。 環境變數會在符合路徑之前展開,因此會取代下列所有路徑:%windir%\system32、%SystemRoot%\system32 和 C:\windows\system32。 此修補程式只會套用至 Windows 7 之前反映的金鑰。

如需詳細資訊,請參閱下列主題: