gpt4 book ai didi

C++ REG_SZ 到 char* 并在没有提升权限的情况下读取 HKLM

转载 作者:可可西里 更新时间:2023-11-01 09:43:45 26 4
gpt4 key购买 nike

所以我一直在尝试从注册表中获取 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;

还有一个简短的问题。我记得如果我的程序以 Vista/7 的管理员身份运行,那么它不能编辑 HKLM 但它仍然可以读取它吗?

最佳答案

(已更新,因为之前的答案是错误的。)

问题可能是您正在返回 value,这是一个堆栈分配的缓冲区。如果您将函数声明为返回 char[256],这将起作用——如果您试图返回 char*,然后调用者获取 value 中第一个字节的地址,它现在指向无效的堆栈数据。您应该在堆上将 value 分配为 char*,这样您就可以不受惩罚地返回指针。

是否允许您读取或编辑注册表项取决于将哪些 ACL 应用于您正在阅读的注册表项。可以将 key 的权限设置为未提升权限的用户甚至无法读取 key ,但也可以将权限设置为所有用户都可以读取和写入.您在上面阅读的 key 应该对所有用户都是可读的,但除了管理员外,它是不可修改的。

关于C++ REG_SZ 到 char* 并在没有提升权限的情况下读取 HKLM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3175449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com