您的位置:首页 > 其它

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位 注册表 winapi