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条)

报告相同问题?

悬赏问题

  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发