共用方式為


登錄重新導向器

登錄重新導向器會藉由在 WOW64 上提供登錄特定部分的個別邏輯檢視,來隔離 32 位和 64 位應用程式。 登錄重新導向器會攔截其個別邏輯登錄檢視的 32 位和 64 位登錄呼叫,並將其對應至對應的實體登錄位置。 重新導向程式對應用程式而言是透明的。 因此,32 位應用程式可以存取登錄數據,就像是在 32 位 Windows 上執行一樣,即使數據儲存在 64 位 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 位世界」,而不是 「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。 字串的開頭必須是指向 \system32 %windir%或 底下的路徑。 字串比較不區分大小寫。 環境變數會在符合路徑之前展開,因此會取代下列所有路徑:%windir%\system32、%SystemRoot%\system32 和 C:\windows\system32。 此修補程式只會套用至 Windows 7 之前反映的密鑰。

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