Lie*_*nau 2 c++ windows registry uac
所以我一直试图从注册表中获取REG_SZ值并将其存储为char*.环顾互联网后,这就是我想到的.问题是我获得的值不是存储在注册表中的值,我得到了一堆随机垃圾.我怎样才能正确获得价值?
HKEY hKey;
char value[256];
// Open the key
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0\\", 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS)
{
return "";
}
// Read the value
DWORD dwType = REG_SZ;
DWORD dwCount = sizeof(value);
if(RegQueryValueEx(hKey, "ProcessorNameString", NULL, &dwType, (LPBYTE)&value, &dwCount) != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return "";
}
// Cleanup and return
RegCloseKey(hKey);
return value;
Run Code Online (Sandbox Code Playgroud)
另一个快速问题.我记得,如果我的程序运行研究所作为Vista的管理员/ 7,然后它不能编辑HKLM但它仍然读它?
(更新,因为以前的答案是错误的.)
问题可能是你正在退回value,这是一个堆栈分配的缓冲区.这将工作只,如果你声明了功能返回char[256]--IF你试图返回char*,然后调用者获得的第一个字节的地址value,也就是现在指向无效的堆栈数据.您应该分配value作为一个char*在堆上,这将让你毫无顾忌返回指针.
是否允许您读取或编辑注册表项取决于您正在阅读的密钥应用了哪些ACL.可以设置密钥的权限,使得未经高速度的用户甚至无法读取密钥,但也可以设置权限,以便所有用户都可以读取和写入.您上面阅读的密钥应该是所有用户都可读的,但除了管理员之外,它不会被修改.