繁体   English   中英

无法读取C ++中的注册表项

[英]Cannot read Registry entry in C++

我有一个我似乎无法在C ++中阅读的注册表项,但它出现在Regedit

使用以下C ++代码段:

openResult=RegOpenKeyEx( HKEY_LOCAL_MACHINE, _TEXT("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full"), 0, KEY_READ, &root);
readResult1=RegQueryValueEx(root, _TEXT("InstallPath"), NULL, NULL, data1, &size);
readResult2=RegQueryValueEx(root, _TEXT("fake_entry"), NULL, NULL, data2, &size);

我的第二个RegQueryValueEx()调用得到错误2, ERROR_FILE_NOT_FOUND

如下图所示,我的fake_entry存在。

在此输入图像描述

我通过Regedit创建了这个条目。

受WOW64影响的 Microsoft 注册表项不包括我正在尝试阅读的位置,如下图所示,我的fake_entry不在Wow6432Node位置。

在此输入图像描述

  • 是的,我知道这不是我应该更改的注册表位置。 当我调试我的代码时,我偶然发现了这一点,我很好奇为什么我添加的fake_entry不起作用。
  • 是的,我读过有关Registry Redirector的内容
  • 是的,我读过这个问题
  • 是的,我尝试在SOFTWARE\\\\Wow6432Node\\\\Microsoft\\\\NET Framework Setup\\\\NDP\\\\v4\\\\Full读取fake_entry并出现相同的错误。

使用ASCII字符编码在Visual Studio 2010中运行Windows 7,64位,C ++。

我误解了注册表重定向器吗? 我的代码有问题吗? 注册表的某些部分是否有某种权限设置? 我显然错过了一些东西。 请指出我正确的方向。

尝试

openResult = RegOpenKeyEx( HKEY_LOCAL_MACHINE, _TEXT("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full"), 0, KEY_READ|KEY_WOW64_64KEY, &root);

根据MSDN,你应该使用KEY_WOW64_64KEYKEY_WOW64_32KEY进行WOW64访问

您误读了受WOW64影响的密钥表。 从该页面的顶部:

下表列出了重定向,由32位和64位应用程序共享或在64位Windows上重定向和反映的注册表项。 除非另行指定,否则此表中键的子键继承父键的行为。 如果密钥没有在此表中列出父密钥,则密钥将被共享。

您的密钥的父级是HKLM \\ Software,它被重定向。 所以你的密钥也被重定向了。 它从其父级继承,正如我引用的文档所解释的那样。

您需要使用KEY_WOW64_64KEY读取64位视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM