登錄反映
[本主題中的資訊適用於 Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP。 從 Windows 7 和 Windows Server 2008 R2 開始,WOW64 不再使用登錄反映,而且先前反映的密鑰會改為共用。 如需詳細資訊,請參閱 受 WOW64影響之登錄機碼。
登錄重新導向器 藉由在 WOW64 上提供登錄特定部分的個別邏輯檢視,來隔離 32 位和 64 位應用程式。 不過,在32位和64位檢視中,某些登錄機碼的值必須相同。
登錄反映的程式 會複製兩個登錄檢視之間的登錄機碼和值,使其保持同步。 每個檢視都有每個反映登錄機碼的個別實體複本,一個用於 32 位登錄檢視,另一個用於 64 位登錄檢視。
呼叫 RegCloseKey關閉金鑰時,會複製反映的密鑰。 請注意,這會產生可能的競爭狀況:如果多個進程變更反映的索引鍵,則最後一個 RegCloseKey 呼叫會決定密鑰的最終值。
反映器會在檢視之間複製本機伺服器的 COM 啟用數據,但不會複製處理中的數據,因為 64 位 Windows 不允許 32/64 進程中的數據混合。
未針對共用登錄機碼或未重新導向的登錄機碼啟用反映。 例如,HKEY_LOCAL_MACHINE\System 索引鍵未啟用反映。 如需重新導向、共用或反映的登錄機碼清單,請參閱 受 WOW64 影響之登錄機碼。
登錄反映使用「最後寫入器獲勝」原則,如下列範例所示:
- 在全新安裝 64 位 Windows 之後,會註冊 64 位 Wordpad.exe 來處理.doc檔案。 反映器會將.doc註冊從64位登錄檢視複製到32位登錄檢視。
- 系統管理員會安裝 32 位 Office,它會註冊 32 位 Winword.exe 來處理 32 位登錄檢視中的.doc檔案。 登錄反映器會將這項資訊複製到64位登錄檢視中,因此32位和64位應用程式都會針對.doc檔案啟動32位版本的 Winword.exe。
- 系統管理員會安裝 64 位 Office,它會註冊 64 位 Winword.exe 來處理 64 位登錄檢視中的.doc檔案。 登錄反映器會將此資訊複製到32位登錄中,因此32位和64位應用程式都會針對.doc檔案啟動64位版本的 Winword.exe。
因此,會保留最近安裝之應用程式的檔案關聯資訊。
對於 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,只會反映未指定 InprocServer32 或 InprocHandler32 的 CLSID。 只有 LocalServer32 CLSID 會反映,因為它們已用盡進程,而且可由 32 位或 64 位應用程式啟用。 InProcServer32 CLSID 不會反映,因為無法載入 32 位 DLL 以在 64 位進程中執行,或 32 位進程中執行的 64 位 DLL。
對於 HKEY_LOCAL_MACHINE\Software\Classes\Appid 和 HKEY_CURRENT_USER\Software\Classes\Appid,如果 DllSurrogate 值為空字串,DllSurrogate 和 DllSurrogateExecutable 登錄值不會反映。
若要停用並啟用特定反映密鑰的登錄反映,請使用 RegDisableReflectionKey 和 RegEnableReflectionKey 函式。 這些函式不會影響本主題稍早反映索引鍵清單中的索引鍵。 應用程式應該只針對所建立的登錄機碼停用反映,而不會嘗試停用預先定義的機碼反映,例如 HKEY_LOCAL_MACHINE 或 HKEY_CURRENT_USER。 若要判斷反映清單中的索引鍵是否已停用,請使用 RegQueryReflectionKey 函式。
反映的機碼不應用於交易登錄作業中。 在交易期間寫入反映的索引鍵可能會導致交易失敗。 如需交易的詳細資訊,請參閱 核心交易管理員。
相關主題