无法从注册表中读取字符串

Cant read string from registry

本文关键字:读取 字符串 注册表      更新时间:2023-10-16

我有一个问题:(

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,我认为这是我的字符串长度,但为什么不写入storePath参数?

问候!

您的变量大小似乎包含错误的值。来自MSDN上关于RegQueryValueEx大小参数的文章:

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

这在你的代码中似乎是不正确的,因为你有size=sizeof(DWORD),它显然太小了,无法包含你试图获取的路径,正如你注意到的那样,size在调用之后是28,28是要读取的数据的大小(它解释了ERROR_MORE_DATA,我认为这几乎是不言自明的)。

您应该重新编写一些代码,以传递正确的大小和这个大小的缓冲区。

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