注册表操作函数RegOpenKeyEx在win7 64下返回的值不正确。解决思路

注册表操作函数RegOpenKeyEx在win7 64下返回的值不正确。
RegSetValueEx 在win7 64下返回的值不正确,第四个参数加上KEY_WOW64_64KEY也不行。

------解决方案--------------------
2、程序编写
编程过程中,可以使用KEY_WOW64_64KEY和KEY_WOW64_32KEY明确的指定操作64位注册表项或者32位注册表项。例如,
在32bit子系统应用程序中,可以用如下方式明确指定访问64bit注册表项,程序代码:
::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Sobey\\MPC "), 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hKey)
注意关键字KEY_WOW64_64KEY;
这种方式写入的注册表项将会确切的位于位置:HKEY_LOCAL_MACHINE\SOFTWARE\Sobey\MPC(使用regedit工具软件对应的位置)。
在64bit子系统应用程序中,可以用如下方式明确指定访问32bit注册表项,程序代码:
::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Sobey\\MPC\\Test"), 0, KEY_ALL_ACCESS | KEY_WOW64_32KEY, &hKey)
注意关键字KEY_WOW64_32KEY
这种方式写入的注册表项将会确切的位于位置:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Sobey\MPC(使用regedit工具软件对应的位置)。
 
3、特别提醒
上述说明只针对HKEY_LOCAL_MACHINE主键而言,HKEY_CURRENT_USER主键下没有类似情况;当访问HKEY_CURRENT_USER主键时,明确指定KEY_WOW64_64KEY和KEY_WOW64_32KEY标志也没有意义。
总之,尽可能使用HKEY_CURRENT_USER主键来保存用户配置吧。
----------------------------------------------------
网上找的,我没有安装64系统,不知道有没有用
------解决方案--------------------
win7 64下默认权限是不对普通进程公开的,如果不是以管理员方式运行的进程,则只能读取 local_machine 而不能写入,你可以先设置下你要写入的位置的安全属性试试。
在子键上右击->权限
------解决方案--------------------
没玩过64位的系统,32位下RegSetValuseEx的写法:
DWORD value =1;
RegSetValueEx(key,"valueName",0,REG_DWORD,(BYTE*)&value,sizeof(DWORD));
64位下第4个参数加上KEY_WOW64_64KEY应该没错,LZ字段长度是否书写正确?
------解决方案--------------------
GetLastError看返回值
------解决方案--------------------
1.是否有权限
2.是否路径正确
------解决方案--------------------
WIN7下没用过,帮顶一个
------解决方案--------------------
win7 的问题不一般?!

------解决方案--------------------
探讨
RegSetValueEx 在win7 64下返回的值不正确,第四个参数加上KEY_WOW64_64KEY也不行。

------解决方案--------------------
权限问题?
------解决方案--------------------
在win7 下操作注册表确实不像xp下简单,我在xp 下编的, 在win7下根本没反应