TRegistry를 사용하여 HKLM에서 키를 만드는 방법
-
14-11-2019 - |
문제
HKLM에서 키를 생성하려고 하는데 HKLM\SOFTWARE\Wow6432Node 아래에 생성됩니다!C++ 빌더 2010은 32비트 exe를 생성하고 32개의 앱 섹션에 저장되므로
Windows 7 x64 실행 중
플래그를 사용하여 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;
}
해결책
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;
제휴하지 않습니다 StackOverflow