VC 32位(或64位)win7作業系統的登錄檔操作
1、登錄檔位置
Windows7 64bit系統的登錄檔分32 位登錄檔項和64位登錄檔項兩部分。
在64bit系統下,通過regedit中檢視到指定路徑下的登錄檔項均為64位登錄檔項,而32位登錄檔項被重定位到: HKEY_LOCAL_MACHINE\Software\WOW6432Node。
應用程式操作登錄檔的時候也分32bit方式和64bit方式。運行於64bit系統下的32bit應用程式預設操作32位登錄檔項(即被重定向到WOW6432Node下的子項);而64bit應用程式才是操作的直觀子項。
比如,同在64bit系統下,使用如下程式碼訪問登錄檔:
::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Sobey\\MPC "), 0, KEY_ALL_ACCESS, &hKey)
如果應用程式為32bit子系統,那麼實際訪問的登錄檔位置為:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Sobey\MPC(使用regedit工具軟體對應的位置);
而如果應用程式為64bit子系統,那麼實際訪問的登錄檔位置將會是:
HKEY_LOCAL_MACHINE\SOFTWARE\Sobey\MPC(使用regedit工具軟體對應的位置)。
2、程式編寫
程式設計過程中,可以使用KEY_WOW64_64KEY和KEY_WOW64_32KEY明確的指定操作64位登錄檔項或者32位登錄檔項。例如,
在32bit子系統應用程式中,可以用如下方式明確指定訪問64bit登錄檔項,程式程式碼:
::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Sobey\\MPC "), 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hKey)
注意關鍵字KEY_WOW64_64KEY;
這種方式寫入的登錄檔項將會確切的位於位置:HKEY_LOCAL_MACHINE\SOFTWARE\Sobey\MPC(使用regedit工具軟體對應的位置)。
在64bit子系統應用程式中,可以用如下方式明確指定訪問32bit登錄檔項,程式程式碼:
::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Sobey\\MPC\\Test"), 0, KEY_ALL_ACCESS | KEY_WOW64_32KEY, &hKey)
注意關鍵字KEY_WOW64_32KEY
這種方式寫入的登錄檔項將會確切的位於位置:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Sobey\MPC(使用regedit工具軟體對應的位置)。
3、特別提醒
上述說明只針對HKEY_LOCAL_MACHINE主鍵而言,HKEY_CURRENT_USER主鍵下沒有類似情況;當訪問HKEY_CURRENT_USER主鍵時,明確指定KEY_WOW64_64KEY和KEY_WOW64_32KEY標誌也沒有意義。
總之,儘可能使用HKEY_CURRENT_USER主鍵來儲存使用者配置吧。