2012-02-29 19 views
1

我试图在HKLM中创建一个密钥,但它在HKLM \ SOFTWARE \ Wow6432Node下创建! 如C++助洗剂2010产生的32位的exe和它在32应用程式部分保存
运行Windows 7 64如何使用TRegistry创建HKLM中的密钥

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

除了OpenKeyEx是NT有:(

这里是我的代码

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

您试图访问从32位程序在64位注册表项。为了做到这一点,你需要包括在KEY_WOW64_64KEY标志打开该键时,如:

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

或者:

reg->Access = KEY_WRITE | KEY_WOW64_64KEY; 

在未来,如果你升级到XE2或更高版本,它支持64位的发展,那么你应该指定该标志只有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; 
+0

+很好的解释谢谢。 – 2016-04-12 11:34:00