我做以下電話:爲什麼RegOpenKeyEx()在Vista 64位上返回錯誤代碼2?
result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);
(C++,Visual Studio中5,Vista的64位)。
它與錯誤代碼2(「找不到文件」),即使「regedit
」顯示,鍵存在失敗。此代碼一直在32位XP上工作。爲什麼當它顯然存在時「文件未找到」?
我做以下電話:爲什麼RegOpenKeyEx()在Vista 64位上返回錯誤代碼2?
result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);
(C++,Visual Studio中5,Vista的64位)。
它與錯誤代碼2(「找不到文件」),即使「regedit
」顯示,鍵存在失敗。此代碼一直在32位XP上工作。爲什麼當它顯然存在時「文件未找到」?
我發現我可以使用標誌解決我的問題:KEY_WOW64_64KEY
,如:
result = RegOpenKeyEx(key, s, 0, KEY_READ|KEY_WOW64_64KEY, &key);
在Windows 64位系統的註冊表實際上是分爲分成兩部分。一部分由64位進程使用,一部分由32位進程使用。例如,如果一個32位應用程序以編程方式寫入它認爲是HKLM \ SOFTWARE \ Company \ Application的應用程序,它實際上被WoW64層重定向到HKLM \ SOFTWARE \ Wow6432Node \ Company \ Application。
所以,當您運行32位應用程序,並呼籲RegOpenKeyEx它的實際工作對Wow6432Node \文件夾,而不是常規\ SOFTWARE節點。
我也有類似的問題。 我用:
dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
(LPWSTR)"SOFTWARE\\0test",
0,
WRITE_DAC ,
&hKey);
這沒有奏效。我試了一下這樣的,它的工作:
dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T("SOFTWARE\\0test"),
0,
WRITE_DAC ,
&hKey);
決不只是插入蒙上閉嘴編譯器。編譯器正確拒絕編譯第一個沒有演員。 – 2011-07-29 17:47:11
是,Win7的64B,進一步增加標誌KEY_WOW64_64KEY,它會工作。 如果不工作,請參閱http://msdn.microsoft.com/en-us/library/ms724897(v=VS.85).aspx
您有「使用多字節字符集」或鑄造字符串代碼(LPWSTR)編譯
注意,你不應該依賴於關鍵被稱爲「Wow6432Node 」。改爲使用RegOpenKeyEx標誌訪問其他註冊表視圖。 – 2011-07-29 17:46:44