使用RegOpenKeyEx打开HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run 成功,RegQueryValueEx 失败。
又随便换了几个位置的键读取,同样的代码有的成功,有的失败。逐一确认不知权限的问题。
网上找了半天,原来是64位系统的注册表结构和32位略有不同。
比如:
32位 HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\
64位 HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\
路径被映射到wow6432node下,如果恰巧32位同路径下值相同,就可以顺利取到值。
打开注册表编辑器互相比较一下,就很容易明白了。
64位读取32位注册表路径要在RegOpenKeyEx时加上KEY_WOW64_64KEY参数。
RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
0,
KEY_QUERY_VALUE|KEY_WOW64_64KEY,
&hkey)
原文链接:https://blog.csdn.net/vawter_gu/article/details/50471139