登錄反映
[本主題中的資訊適用于 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 位和 64 位用戶端提供要求的 32 位 OLE 伺服器,可以讓其 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 位進程中執行,或 64 位 DLL 以在 32 位進程中執行。
對於HKEY_LOCAL_MACHINE\Software\Classes\Appid和HKEY_CURRENT_USER\Software\Classes\Appid,如果DllSurrogate 和 DllSurrogateExecutable登錄值是空字串,則不會反映其值。
若要停用並啟用特定反映機碼的登錄反映,請使用 RegDisableReflectionKey 和 RegEnableReflectionKey 函式。 這些函式不會影響本主題稍早反映索引鍵清單中的索引鍵。 應用程式應該只針對所建立的登錄機碼停用反映,而不會嘗試停用預先定義金鑰的反映,例如 HKEY_LOCAL_MACHINE 或 HKEY_CURRENT_USER。 若要判斷反映清單上的索引鍵是否已停用,請使用 RegQueryReflectionKey 函式。
反映的金鑰不應用於交易登錄作業。 在交易期間寫入反映的索引鍵可能會導致交易失敗。 如需交易的詳細資訊,請參閱 核心交易管理員。
相關主題