RegOpenKeyEx / RegGetValue在存在的键上返回ERROR_FILE_NOT_FOUND

registry函数返回“找不到”的键当然存在。 我有正确的字符集,并使用双反斜杠,所以这不是问题。

以下是输出密钥的输出:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Netmon3] "NetmonVersion"="3.4.2350.0" "NPLVersion"="03.02" "InstallDir"="C:\\prog\\netmon3\\" "NetmonEdition"="Capture and Parser Engine" 

这是函数调用:

 x = RegOpenKeyExA( HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Netmon3", 0, KEY_READ, &hKey); 

返回值x是2,意思是ERROR_FILE_NOT_FOUND 。 虽然使用“ SOFTWARE\\Microsoft ”作为string工作正常。

调用RegGetValue()具有相同的问题:

 x = RegGetValueA( HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Netmon3", "InstallDir", RRF_RT_ANY, NULL, (PVOID)install_directory, &BufferSize ); 

再次,我得到2结果,意思是没有find。

我检查了它的权限,所有“用户”对它有“读取”权限。

不pipe我错过了什么,都要看到明显的东西,但绞尽脑汁,我看不见它。

Marsh Ray的答案如下:我在64位系统上编译32位,而Netmon3的安装是64位的。 将构build设置更改为64位可解决问题。

Solutions Collecting From Web of "RegOpenKeyEx / RegGetValue在存在的键上返回ERROR_FILE_NOT_FOUND"

也许你在64位Windows操作系统上以32位进程运行?

您也可以使用32位代码,但是您必须指定一个附加标志:

 REGSAM flag = KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS; if(isWin64Bit()) flag |= KEY_WOW64_64KEY; else flag |= KEY_WOW64_32KEY; LONG err = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, SOME_REGKEY, 0, flag, &hKey); 

isWin64Bit方法的实现可以在这里找到。