gpt4 book ai didi

c++ - RegOpenKeyEx 返回 ERROR_NOACCESS

转载 作者:行者123 更新时间:2023-11-28 07:49:06 25 4
gpt4 key购买 nike

我正在尝试使用以下代码在 Windows 7 x64 下读取注册表项:

static void ReadRegistryKey(HKEY hkey, TCHAR* path)
{
HKEY hkey2;
TCHAR value[MAX_PATH];
TCHAR data[4096];
const DWORD dataLength = 4096 * sizeof(TCHAR);
const DWORD valueLength = MAX_PATH+1;
DWORD returnval;
DWORD type = 0;

HLOCAL mem = LocalAlloc(LPTR, 260);
char * pc = (char*)mem;
pc++;
wchar_t* pwc = (wchar_t*)pc;
lstrcpy(pwc, path);

// Does key exist?
returnval = RegOpenKeyEx(hkey, pwc, 0 , KEY_READ | KEY_WOW64_64KEY, &hkey2);

if(returnval == ERROR_SUCCESS)
{
int i = 0;
while(returnval == ERROR_SUCCESS)
{
DWORD actualLength = dataLength;
DWORD actualValueLength = valueLength;

returnval = RegEnumValueW( hkey2,
i,
value,
&actualValueLength,
NULL,
&type,
(LPBYTE)data,
&actualLength
);

if(returnval == ERROR_NO_MORE_ITEMS)
{
_tprintf(_T("NO MORE KEYS FOUND in %s\n"), path);
break;
}
if(returnval == ERROR_SUCCESS)
{
// STUFF
}
}
}
}

当我使用 KEY_READ | KEY_WOW64_32KEY 我得到存储在 32 位注册表下的值,但是当我使用上面的代码尝试读取“正常”64 位注册表时,我得到错误代码 0x3e6 (ERROR_NOACCESS)

我调用方法的方式:

ReadRegistryKey(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run");

如何读取 64 位注册表值?谢谢

最佳答案

我认为 pwc 的分配和指针运算是导致问题的原因。将路径直接传入RegOpenKeyEx函数。

还值得注意的是,如果 path 超过 260 字节,lstrcpy 将导致缓冲区溢出。而是使用 StringCchCopy在 Windows 中提供一个字符串拷贝,该拷贝最多只能复制目标缓冲区中可用的字节数。

关于c++ - RegOpenKeyEx 返回 ERROR_NOACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14219586/

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