无法从注册表中读取字符串
Cant read string from registry
我有一个问题:(
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
相关文章:
- 如何使用Luacneneneba API正确读取字符串和表参数
- 如何从二进制文件中读取字符串
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 读取字符串文本输入以创建 2D 矢量
- 罗马数字到阿拉伯语 (vinculum) - 读取字符串中的字符
- C++:从文件中读取字符串和整数,并获得最大数字
- C++,从文件中读取字符串,分段错误
- 如果语句错误地读取字符串,则始终在第一个条件返回
- 如何从内存中读取字符串?
- 如何创建一个C++程序来读取字符串数组中的信息,然后将其排序到类中?
- 我需要C++读取字符串数组中每个单词的第一个字母
- 读取字符串C++的字符时出错
- 读取字符串直到标志 (C++)
- 读取字符串字符时出错 - 对于数组中的字符串值
- C++输入文件流无法从文件中读取字符串
- 读取字符串字符时出错
- 如何读取<字符串,矢量<对<int,字符串的映射>>>
- 如何使此函数使用 getline 读取字符串并使用 int 执行相同的行为?
- C++ 使用 Strtok 读取字符串字符时出错
- 使用 getline 读取字符串,但每行中都有换行符