如何使用TRegistry在HKLM中创建密钥

时间:2012-02-29 06:44:53

标签: registry c++builder c++builder-2010

我正在尝试在HKLM中创建一个键,但它在HKLM \ SOFTWARE \ Wow6432Node下创建! 因为C ++ builder 2010生成32位exe并且它节省了32个应用程序部分
运行Windows 7 x64

如何使用TRegistry来使用flags或....

另外OpenKeyEx不存在:(

这是我的代码

TRegistry * reg=new TRegistry(KEY_WRITE);
try 
{
  reg->RootKey=HKEY_LOCAL_MACHINE;
  if (!reg->OpenKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\UserList",0)) 
  {
    //reg->CreateKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\UserList");
  }
  //reg->Access=KEY_WRITE;
  bool ores=reg->OpenKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\UserList",true);
  reg->WriteString("ouser","0");
  reg->CloseKey();
} 
catch (...) 
{
  delete reg;
}

1 个答案:

答案 0 :(得分:4)

您正尝试从32位进程访问64位注册表项。为此,您需要在打开密钥时包含KEY_WOW64_64KEY标志,例如:

TRegistry *reg = new TRegistry(KEY_WRITE | KEY_WOW64_64KEY);

或者:

reg->Access = KEY_WRITE | KEY_WOW64_64KEY;

将来,如果您升级到支持64位开发的XE2或更高版本,那么只有当IsWow64Process()报告您是在WOW64下运行的32位进程时才应指定该标志,例如:

BOOL bIsWow64 = FALSE;
IsWow64Process(GetCurrentProcess(), &bIsWow64);

long flags = KEY_WRITE;
if (bIsWow64) flags |= KEY_WOW64_64KEY;

TRegistry *reg = new TRegistry(flags);

reg->Access = flags;