這是從Windows SDK約重定向(這裏還反射和共享)
註冊表重定向
註冊表重定向器隔離32位和通過在WOW64上提供獨立的註冊表關鍵部分邏輯視圖來實現64位應用程序。註冊表重定向程序截取到每個邏輯註冊表視圖的32位註冊表調用,並將它們映射到相應的物理註冊表位置。重定向過程對於應用程序是透明的。因此,即使數據存儲在64位Windows上的不同位置,32位應用程序也可以像訪問32位Windows一樣訪問註冊表數據。
重定向爲以下注冊表鍵激活:
HKEY_LOCAL_MACHINE\Software
HKEY_USERS\*\Software\Classes
HKEY_USERS\*_Classes
Note * indicates a match for all user security IDs (SID).
下面的方案說明使用它們的邏輯的觀點:
32位應用程序檢查的所述所有腦幹以下注冊表項:HKEY_LOCAL_MACHINE \ Software \ Hello。如果密鑰不存在,它將以默認值「Hello 32-bit world」創建它;否則,它讀取並顯示該值。 將相同的應用程序修改爲編寫「Hello 64位世界」而不是「Hello 32位世界」,並重新編譯爲64位應用程序。
當32位應用程序在64位Windows上運行時,它將顯示「Hello 32-bit world」。當64位應用程序運行時,它會顯示「Hello 64-bit world」。兩個應用程序都使用相同的預定義句柄和相同的密鑰名稱調用相同的註冊表函數;不同之處在於每個應用程序都在其註冊表的邏輯視圖上運行,並且每個視圖都映射到註冊表的一個單獨的物理位置,從而使字符串的兩個版本保持不變。
爲了幫助將包含%ProgramFiles%的REG_EXPAND_SZ鍵寫入註冊表的應用程序,WOW64攔截這些寫入,並用「%ProgramFiles(x86)%」替換它們。這個環境變量是爲所有進程定義的。例如,如果Program Files目錄位於C驅動器上,則「%ProgramFiles(x86)%」擴展爲「C:\ Program Files(x86)」。
爲了通過COM和其他機制啓用應用程序互操作性,WOW64使用註冊表反射,該注入反射在兩個註冊表視圖之間複製特定的註冊表項和值以保持它們同步。該反射器是智能的,並且在視圖之間複製本地服務器的COM激活數據,但不復制正在處理的數據,因爲在64位Windows上不允許32/64進程內數據混合。
怎麼辦
在程序
KEY_WOW64_64KEY 0x0100 Access a 64-bit key from either a 32-bit or 64-bit application.
Windows 2000: This flag is not supported.
KEY_WOW64_32KEY 0x0200 Access a 32-bit key from either a 32-bit or 64-bit application.
Windows 2000: This flag is not supported.
從命令提示符處看到reg flags /?
讓你的鑰匙退出重定向。
並提醒UAC也可能將其虛擬化。因爲它會將一些寫入HKLM的內容重定向到HKCU。授予用戶寫入密鑰的權限將會克服這一點。
如果你是在64位有可能你正在查看錯誤位的密鑰。有些密鑰是虛擬化的,因此32位和64位程序認爲它是相同的密鑰,但引擎蓋下是完全不同的密鑰,這也適用於'system32'文件夾。 'HKEY_LOCAL_MACHINE \ Software' 'HKEY_USERS \ * \ Software \ Classes' 'HKEY_USERS \ * _ Classes' – Trigger
好的....那我該怎麼辦?我的.bat文件執行HKLM \ Software \ Google \ Chrome \ NativeMessagingHosts \ abc.def.ghi – MegaMark