1

HKLMでキーを作成しようとしていますが、HKLM \ SOFTWARE\Wow6432Nodeの下に作成されます。C ++ builder 2010は32ビットのexeを生成し、Windows7x64を
実行している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 に答える