Windows 32-bits、64-bits 作業系統的 Registry 注意事項

此為轉載文章

在 64-bits 的作業系統下執行 32-bits 的應用程式時,若需要寫入 Registry 時,會發現機碼被作業系統預設寫入 Wow6432Node 的目錄底下,不論是 HKEY_CURRENT_USER 還是 HKEY_LOCAL_MACHINE 皆相同。

在 HKEY_CURRENT_USER\Software\ 底下寫入機碼就會預設出現在 HKEY_CURRENT_USER\Software\Wow6432Node\ 的同樣位置
同理在 HKEY_LOCAL_MACHINE\SOFTWARE\ 底下寫入機碼,就會出現在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ 底下相同的位置

位置不變,只是多了一層 Wow6432Node 的資料夾,這是為了做 32-bits 應用程式與 64-bits 作業系統的對應而產生的結果。

其實一般來說不太需要特別注意這件事,應用程式的寫作上以原本的路徑在讀寫就行了,要不要指向 Wow6432Node 完全由作業系統來決定,但是有些例外,如果某些值作業系統只會去參考在原本的非 Wow6432Node 路徑下時,而這個值被寫到 Wow6432Node 的位置下就沒辦法發揮預期的效果了,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ 就是一個例子,如果有一個 32-bits 的應用程式在此處寫入機碼,依前面所言,會被寫到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\LocalDumps\ 裡面,而這樣是無效的,因為作業系統只會參考原本非 Wow6432Node 底下的機碼。

所以我們可加入一個新的參數,指定 32-bits 的應用程式在 64-bits 的作業系統下建立、讀取、寫入機碼時,不要在 Wow6432Node 下執行,而是在原本的位置做寫入,可以參考 MSDN 的說明:Accessing an Alternate Registry View

參數分別為 KEY_WOW64_64KEY:Access a 64-bit key from either a 32-bit or 64-bit application.
與 KEY_WOW64_32KEY:Access a 32-bit key from either a 32-bit or 64-bit application.

以 RegCreateKeyEx 作示範就像這樣

if (ERROR_SUCCESS != RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows\\Windows Error Reporting\\LocalDumps\\MyApp.exe"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_WOW64_64KEY, NULL, &hKey, &disp))
{
    return;
}

轉載來源: http://ascii-iicsa.blogspot.tw/2013/06/32-bits64-bits-registry.html


 上一篇
Yuyan's Exportxlsx 專案 Yuyan's Exportxlsx 專案
CC 報表產生器功能 對每台 NVR 產生 VLOSS 報表,並將即時串流影像用 ffmeg 解碼截圖輸出至 xlsx 尚未擴展功能 將每
2018-11-29
下一篇 
Windows UAC白名單設置 Windows UAC白名單設置
UAC 簡介 使用者帳戶控制(英語:User Account Control,UAC)是 Windows Vista 中新出現的安全技術,通
2018-02-22
  目錄