yeyingting30
yeyingting30
采纳率66.7%
2017-02-26 14:52 阅读 1.1k

C++注册表枚举结果和注册表查询结果完全不同,这是怎么回事

1

我用注册表枚举函数RegEnumValue枚举HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run子键下的键值项,得到的结果和用RegEdit查询的结果完全不同,这是怎么回事,枚举代码如下:
[code=c]
#define REG_RUN L"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

DWORD dwType = 0;
DWORD dwBufferSzie = MAXBYTE;
DWORD dwKeySize = MAXBYTE;
TCHAR szwValueName[MAXBYTE] = { 0 };
TCHAR szwValueKey[MAXBYTE] = { 0 };

HKEY hKey = NULL;
LONG lRet = RegOpenKey(HKEY_LOCAL_MACHINE, REG_RUN, &hKey);

if (lRet!=ERROR_SUCCESS)
{
    return;
}

int i = 0;
CString strTmp;
while (TRUE)
{
    dwKeySize= dwBufferSzie = sizeof(szwValueName) / sizeof(TCHAR);


    lRet = RegEnumValue(hKey, 
        i, 
        szwValueName,
        &dwBufferSzie, 
        NULL, 
        &dwType, 
        (LPBYTE)szwValueKey, 
        &dwKeySize);

    if (lRet == ERROR_NO_MORE_ITEMS)
    {
        break;
    }

    strTmp.Format(L"%d", i);
    m_RunList.InsertItem(i, strTmp);
    m_RunList.SetItemText(i, 1, szwValueName);
    m_RunList.SetItemText(i, 2, szwValueKey);
    i++;
    ZeroMemory(szwValueName, MAXBYTE);
    ZeroMemory(szwValueKey, MAXBYTE);
}

[/code]
上面只是部分代码,代码我运行没有问题,但结果如下小图:
图片说明
而用RegEdit查询的结果如下大图:
图片说明
结果怎么会完全不同啊,请高手指点下

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    oyljerry oyljerry 2017-02-26 15:30

    注意你系统是64位OS,你的程序是32位的话就会读取注册表到wow3264的run key下。
    http://bbs.csdn.net/topics/390533551

    点赞 2 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2017-02-26 15:39

    你的程序读取的是x86的启动项目,如果你的程序是32bit的,实际上windows使用wow64为你的程序提供了一个虚拟层。

    点赞 1 评论 复制链接分享

相关推荐