win32程序读写win7 64位操作系统的注册表
2013-11-08 14:51
351 查看
win32程序读写win7 64位操作系统的注册表
原先一个win32程序好好地,由于组里不少人用了win 7 64位操作系统,指出原程序有bug,程序不能在64位的操作系统上跑。搞了很久,后来网上搜到一些资料说:64位的操作系统:xp下具体的程序在电脑中的位置位于:
HKEY_LOCAL_MACHINE\SOFTWARE
vista中是位于
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
如果你在vista64下面依然访问如下位置,
HKEY_LOCAL_MACHINE\SOFTWARE
你得到的其实就是vista下
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
的列表。
这其中其实是WOW进行了转换。其中并给出了判断64位还是32位平台的函数:
IsWow64返回TRUE则是64位系统,否则为32位系统。
code如下:VC测试通过
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL IsWow64()
{
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
{
// handle error
AfxMessageBox("IsWow64 error!");
}
}
return bIsWow64;
}
然而,奇怪的是:当我们判断为: IsWow64()时,我便将注册表的地址必为:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\我要读的程序名
依然读取不成功。后来请教了一位老同事,他说这种问题,应该看微软的最新的msdn。随即搜了搜,发现:
Do not try to open Wow6432Node to view the alternate registry hive in 32-bit code. Instead open the desired branch (e.g., HKLM\Software\Microsoft\xxx) with the KEY_WOW64_64KEY flag as shown above.
意思是说:访问时,不要去打开Wow6432Node ,而应在API里使用 KEY_WOW64_64KEY 。
参考链接:http://msdn.microsoft.com/en-us/library/aa384129(v=VS.85).aspx
最后,在64位的机器上跑时,使用KEY_WOW64_64KEY标识:
retCode = RegCreateKeyEx(HKEY_LOCAL_MACHINE,subKeyName.c_str(), 0, NULL, REG_OPTION_NON_VOLATILE,
KEY_EXECUTE|KEY_WOW64_64KEY, NULL, &hkey, NULL);
问题果然解决了!
相关文章推荐
- 自动化测试 (五) 读写64位操作系统的注册表
- 自动化测试 (五) 读写64位操作系统的注册表
- 自动化测试读写64位操作系统的注册表
- C# 32位/64位系统下程序读写注册表之差异
- 自动化测试读写64位操作系统的注册表
- win32程序读写64位oracle数据库中的中文乱码问题
- Win7 64位下让VC++6.0编写的Win32程序单进程运行内存突破2G
- C# 32位/64位程序读写注册表之差异
- 自动化测试 (五) 读写64位操作系统的注册表
- 64位win7上32位程序访问64位windows 2008 r2上的oracle数据库
- win7 64位操作系统中 Oracle 11g 安装教程(图解)
- 64位 Windows 操作系统.NET程序无法连接Oracle的解决之道
- win7 64位操作系统中Oracle 11g + plsql安装教程详解(图解)
- win7 64位。未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
- BA-siemens-insight_designer不支持win7 64位操作系统
- .Net中如何限制执行程序只能运行一次和如何读写注册表
- win7,64位操作系统安装oracle
- win7-64位操作系统下载
- c++添加开机启动项,win32 api操作注册表,读写注册表