yeyingting30 2017-02-26 14:52 采纳率: 66.7%
浏览 1160
已采纳

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

我用注册表枚举函数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 2017-02-26 15:30
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?