我有一个我似乎无法在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);
我的第二次ERROR_FILE_NOT_FOUND
电话会收到错误2,RegQueryValueEx()
。
如下图所示,我的fake_entry
已存在。
我是通过Regedit
创建此条目的。
Microsoft的Registry Keys Affected by WOW64不包含我正在尝试阅读的位置,如下图所示,我的fake_entry
不在Wow6432Node
位置。
fake_entry
无效。fake_entry
上阅读SOFTWARE\\Wow6432Node\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full
并出现同样的错误。使用ASCII字符编码在Visual Studio 2010中运行Windows 7,64位,C ++。
我是否误解了注册表重定向器? 我的代码有问题吗? 注册表的某些部分是否有某种权限设置?我显然错过了一些东西。请指出我正确的方向。
答案 0 :(得分:1)
尝试
openResult = RegOpenKeyEx( HKEY_LOCAL_MACHINE, _TEXT("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full"), 0, KEY_READ|KEY_WOW64_64KEY, &root);
根据MSDN,您应该使用KEY_WOW64_64KEY
或KEY_WOW64_32KEY
进行WOW64访问
答案 1 :(得分:1)
您误读了受WOW64影响的密钥表。从该页面的顶部开始:
下表列出了重定向的注册表项,由32位和64位应用程序共享,或在64位Windows上重定向和反映的注册表项。除非另行指定,否则此表中键的子键继承父键的行为。如果密钥没有在此表中列出父密钥,则密钥将被共享。
您的密钥的父级是HKLM \ Software,它被重定向。所以你的密钥也被重定向了。它从其父级继承了它,正如我引用的文档所解释的那样。
您需要使用KEY_WOW64_64KEY读取64位视图。