1

我正在尝试在 HKLM 中创建一个密钥,但它在 HKLM\SOFTWARE\Wow6432Node 下创建!由于 C++ builder 2010 生成 32 位 exe,它保存在
运行 windows 7 x64的 32 个应用程序部分下

如何使用 TRegistry 通过使用标志或....

另外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;
}
4

1 回答 1

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;
于 2012-02-29T09:22:28.207 回答