我有一个问题:(
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?
问候!
答案 0 :(得分:1)
您的变量大小似乎包含错误的值。从MSDN article on RegQueryValueEx大小参数:
指向变量的指针,该变量指定lpData参数指向的缓冲区大小(以字节为单位)。函数返回时,此变量包含复制到lpData的数据大小。
您的代码似乎不正确,因为size=sizeof(DWORD)
显然太小而无法包含您尝试获取的路径,正如您注意到size
在<<1>}之后< / em>调用,28是要读取的数据的大小(并且它解释了ERROR_MORE_DATA
,我认为这是非常自我解释的。)
你应该修改一下代码,以传递正确的大小和这种大小的缓冲区。
答案 1 :(得分:0)
我认为第四个参数应该是RegQueryValueEx中的REZ_SZ