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

标签 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 参数?

问候!

最佳答案

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

A pointer to a variable that specifies the size of the buffer pointed to by the lpData parameter, in bytes. When the function returns, this variable contains the size of the data copied to lpData.

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

您应该稍微修改您的代码以传递正确的大小和此大小的缓冲区。

关于c++ - 无法从注册表中读取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20311953/

相关文章:

c++ - 如何让我的应用程序不链接到某些库? `QT -= ` ?

c++ - 在同一解决方案 C++ express 上的许多项目中更改平台工具集

c++ - 为什么我不能在 operator= 中使用引用类型?

c++ - while循环c++中的负值输入

c++ -::GetPrivateProfileString 读取 INI 文件的整个部分

python - 如何授权/拒绝使用 Python 对 Windows 上的目录进行写访问?

c - 剪贴板内存的本地副本?

c++ - 在 C++ 中递归排序(学习目的)

c++ - GetMessage() 破坏了我的堆栈?

c++ - 如何实现 MS 特定的 _BitScanReverse() 函数?