![](/img/trans.png)
[英]RegOpenKeyEx for SOFTWARE\Microsoft\Windows NT\CurrentVersion\SeCEdit\Reg Values returns Error Code 2
[英]Reading the Windows registry key “SOFTWARE\Microsoft\Windows\CurrentVersion\Run” using RegGetValue() returns error code 2
使用
RegGetValue()
讀取Windows注冊表項“ SOFTWARE \\ Microsoft \\ Windows \\ CurrentVersion \\ Run”將返回錯誤代碼2。
我已經坐了幾個小時來調試這個問題,但是還沒有找到解決方案。
這是我用來檢索名為“ test”的注冊表值的代碼:
long result = RegGetValue(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), TEXT("test"), RRF_RT_ANY, &dwType, (PVOID)&buff, &size);
下面是我已將注冊表值“ test”添加到“運行”鍵(如上所述)的圖片。
我得到的錯誤代碼是2,表示無效的文件。
應該提到的是,本地主機正在運行Windows 10 Pro x64。
造成這種混亂的原因是什么?
修改后的代碼:
使用KEY_WOW64_64KEY標志后,我仍然收到錯誤代碼2。
RegCreateKeyEx(
HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),
NULL,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS | KEY_WOW64_64KEY,
NULL,
&hKey,
&dwStatus)
long result = RegGetValue(hKey, NULL, TEXT("test"), RRF_RT_ANY, &dwType, (PVOID)&buff, &size);
問題
您很可能試圖從32位應用程序訪問64位注冊表視圖。
默認情況下,在WOW64上運行的32位應用程序訪問32位注冊表視圖,而64位應用程序訪問64位注冊表視圖。 以下標志使32位應用程序可以在64位注冊表視圖中訪問重定向的密鑰,而64位應用程序可以在32位注冊表視圖中訪問重定向的密鑰。 這些標志對共享注冊表項無效。
解
您可以在x64模式下重建應用程序,也可以指定所需的注冊表視圖。
HKEY key;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &key);
long result = RegGetValue(key, nullptr, TEXT("test"), RRF_RT_ANY, &dwType, (PVOID)&buff, &size);
有關更多信息: 訪問備用注冊表視圖
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.