[英]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
不起作用。 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_64KEY
或KEY_WOW64_32KEY
进行WOW64访问
您误读了受WOW64影响的密钥表。 从该页面的顶部:
下表列出了重定向,由32位和64位应用程序共享或在64位Windows上重定向和反映的注册表项。 除非另行指定,否则此表中键的子键继承父键的行为。 如果密钥没有在此表中列出父密钥,则密钥将被共享。
您的密钥的父级是HKLM \\ Software,它被重定向。 所以你的密钥也被重定向了。 它从其父级继承,正如我引用的文档所解释的那样。
您需要使用KEY_WOW64_64KEY读取64位视图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.