注册表项

win7 64bit+vs2005 操作注册表
注册表五个根键 

HKEY_CLASSES_ROOT——管理文件系统 
HKEY_LOCAL_MACHINE——管理当前系统硬件配置 
HKEY_LOCAL_USER——管理系统当前用户配置 
HKEY_USERS——管理系统的用户信息 
HKEY_CURRENT_CONFIG——管理当前用户的系统配置 

 

在HKEY_LOCAL_MACHINE\SOFTWARE 目录下新建子键并创建REG_DWORD (32位数值),示例代码:

#include <stdio.h>
#include <Windows.h>
#include <tchar.h>
int _tmain(int argc, _TCHAR* argv[])
{
  HKEY RegHandle;
  DWORD dw;
  HKEY RegOpenHandle;
  DWORD dwYan = 0xff;
  if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\yan"), NULL, 0, REG_OPTION_NON_VOLATILE,
    KEY_ALL_ACCESS, NULL, &RegHandle, &dw))
    printf("RegCreateKeyEx 执行成功\n");
  else
    printf("RegCreateKeyEx 执行失败\n");
 
 
  RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\yan"), NULL, KEY_ALL_ACCESS, &RegOpenHandle);
 
  RegSetValueEx(RegOpenHandle, _T("HelloWord"), NULL, REG_DWORD, (const unsigned char *)&dwYan, sizeof(DWORD));
 
  system("pause");
  return 0;
}
 

注册表位置

Windows7 64bit系统的注册表:分32 位注册表项64位注册表项 两部分

在64bit系统下,通过regedit中查看到指定路径下的注册表项均为64位注册表项

                          而32位注册表项被重定位到:HKEY_LOCAL_MACHINE\Software\WOW6432Node。

应用程序操作注册表的时候也分32bit方式和64bit方式。运行于64bit系统下的32bit应用程序默认操作32位注册表项(即被重定向到WOW6432Node下的子项);而64bit应用程序才是操作的直观子项。

比如,同在64bit系统下,使用如下代码访问注册表:

::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Sobey\\MPC "), 0, KEY_ALL_ACCESS, &hKey)

如果应用程序为32bit子系统,那么实际访问的注册表位置为:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Sobey\MPC(使用regedit工具软件对应的位置);

而如果应用程序为64bit子系统,那么实际访问的注册表位置将会是:HKEY_LOCAL_MACHINE\SOFTWARE\Sobey\MPC(使用regedit工具软件对应的位置)。

我用的是win7 64bit OS + VS2010,RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\yan"), NULL, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &RegOpenHandle);

添加了 KEY_WOW64_64KEY后还是不能写入到 64bit系统下的原注册表,不知道为什么。
————————————————
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值