无法从注册表读取字符串

时间:2013-12-01 12:11:50

标签: c++ winapi visual-c++

我有一个问题:(

bool LoadStorePath(std::wstring &storePath)
{
    HKEY hKey;
    DWORD key = 0;
    LONG result;
    unsigned long type, size=sizeof(DWORD);
    result = RegOpenKeyExW(HKEY_LOCAL_MACHINE,L"Software\\Microsoft\\Windows\\CurrentVersion",0,KEY_QUERY_VALUE,&hKey);
    if(result == ERROR_SUCCESS)
    {
        result = RegQueryValueExW(hKey,L"CryStore",NULL, NULL, (LPBYTE)&storePath,&size);
        RegCloseKey(hKey);
    }
    return storePath.empty();
}

注册表中的字符串是“D:\ CryptStore” 此代码需要从注册表中读取字符串,但不是。我试图调试并在调用RegQueryValueExW后找到大小为28我认为它是我的字符串len但为什么它不写入storePath param?

问候!

2 个答案:

答案 0 :(得分:1)

您的变量大小似乎包含错误的值。从MSDN article on RegQueryValueEx大小参数:

  

指向变量的指针,该变量指定lpData参数指向的缓冲区大小(以字节为单位)。函数返回时,此变量包含复制到lpData的数据大小。

您的代码似乎不正确,因为size=sizeof(DWORD)显然太小而无法包含您尝试获取的路径,正如您注意到size在<<1>}之后< / em>调用,28是要读取的数据的大小(并且它解释了ERROR_MORE_DATA,我认为这是非常自我解释的。)

你应该修改一下代码,以传递正确的大小和这种大小的缓冲区。

答案 1 :(得分:0)

我认为第四个参数应该是RegQueryValueEx中的REZ_SZ