在c ++中读取Windows注册表项REG_BINARY

时间:2013-01-05 14:48:32

标签: c++ windows registry

我正在尝试用c ++读取注册表项, 那是我的功能:

    DWORD regkey()
{
    HKEY hKey;
    DWORD dwDisp = REG_BINARY;
    DWORD dwSize = sizeof(dwDisp);
    DWORD dwValue = 0;
    DWORD dwReturn;
    DWORD dwBufSize = sizeof(dwDisp);

    if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HERE\\IS\\THE\\REGKEY",0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
    {
        DWORD error = RegQueryValueEx(hKey,L"key",0,0, (LPBYTE)&dwReturn, &dwBufSize);
        if(error == ERROR_SUCCESS)
        {
            return dwReturn;
        }
    }

    RegCloseKey(hKey);

    return 0;
}

但它什么也没有回来......请帮助我。

1 个答案:

答案 0 :(得分:0)

注册表函数将返回有意义的错误代码,这可以帮助您诊断问题。试着坚持那段代码:

{
    HKEY hKey;
    DWORD dwDisp = REG_BINARY;
    DWORD dwSize = sizeof(dwDisp);
    DWORD dwValue = 0;
    DWORD dwReturn;
    DWORD dwBufSize = sizeof(dwReturn);

    DWORD dwError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HERE\\IS\\THE\\REGKEY",0, KEY_READ, &hKey) ;
    if( dwError == ERROR_SUCCESS)
    {
        dwError = RegQueryValueEx(hKey,L"key",0,0, (LPBYTE)&dwReturn, &dwBufSize);
        if(error == ERROR_SUCCESS)
        {
            // it worked!
        }
        else
        {
            // it failed to read, check dwError for the error code
            dwResult = 0;
        }

        RegCloseKey(hKey);
    }
    else
    {
        // it failed to open, check dwError for the error code
        dwResult = 0;
    }


    return 0;
}

如果您使用的是Visual Studio,则可以中断任何故障点并在监视窗口中评估dwError,hr,hr格式说明符使调试器为您查找错误代码并提供描述问题的有意义字符串。这应该会让你了解出了什么问题。

如果您可以告诉我们哪个功能失败以及您从该功能返回的代码,我们可能会提供更详细的帮助。就像现在一样,你向我们展示了一些猜谜游戏。也许您拼错了您的注册表项名称或给出了错误的路径。您的代码似乎暗示您正在传递注册表项RegQueryValueEx(),但您的意思是将值名称而不是键名称传递给该函数。也许您遇到访问权限问题,因为您正在查看注册表的受保护部分,而不是作为具有足够权限读取该密钥的帐户运行。 (因此,您应该通过KEY_READ代替KEY_ALL_ACCESS。)