首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegOpenKeyEx/RegGetValue返回已存在的键的ERROR_FILE_NOT_FOUND

RegOpenKeyEx/RegGetValue返回已存在的键的ERROR_FILE_NOT_FOUND
EN

Stack Overflow用户
提问于 2012-06-21 12:07:19
回答 2查看 5.8K关注 0票数 9

注册表函数在确定存在的键上返回"not found“。我有正确的字符集并使用了双反斜杠,所以这不是问题所在。

以下是导出密钥的输出:

代码语言:javascript
复制
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Netmon3]
"NetmonVersion"="3.4.2350.0"
"NPLVersion"="03.02"
"InstallDir"="C:\\prog\\netmon3\\"
"NetmonEdition"="Capture and Parser Engine"

下面是函数调用:

代码语言:javascript
复制
x = RegOpenKeyExA(
           HKEY_LOCAL_MACHINE, 
           "SOFTWARE\\Microsoft\\Netmon3", 
           0, 
           KEY_READ, &hKey);

返回值x为2,表示ERROR_FILE_NOT_FOUND。不过,只要使用"SOFTWARE\\Microsoft“作为字符串就可以了。

调用RegGetValue()也有同样的问题:

代码语言:javascript
复制
x = RegGetValueA(
        HKEY_LOCAL_MACHINE,
        "SOFTWARE\\Microsoft\\Netmon3",
        "InstallDir",
        RRF_RT_ANY,
        NULL,
        (PVOID)install_directory,
        &BufferSize
        );

再一次,我得到了2作为结果,意味着没有找到。

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

不管我错过了什么,它必须看得很明显,但绞尽脑汁,我看不到它。

--

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

EN

回答 2

Stack Overflow用户

发布于 2012-06-21 12:19:29

也许您是在64位Windows操作系统上作为32位进程运行?

票数 6
EN

Stack Overflow用户

发布于 2015-04-13 16:29:44

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

代码语言:javascript
复制
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);

可以在here中找到isWin64Bit方法的实现。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11131353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档