如何在c++builder中将注册表导出到*.reg文件

How in c++ builder export registry to *.reg file?

本文关键字:reg 文件 注册表 c++builder      更新时间:2023-10-16

我使用reg->SaveKey("软件","D:\1.reg")。但得到的是空文件,没有数据。

void __fastcall TForm1::Button2Click(TObject *Sender)
{
      TRegistry *reg=new TRegistry(KEY_READ);
      reg->RootKey=HKEY_LOCAL_MACHINE;
      reg->OpenKey("Software",0);;
      reg->SaveKey("Software","D:\1.reg");
      delete reg;
}

SaveKeyRegSaveKey()的松散包装,其文档声明:

调用进程必须启用SE_BACKUP_NAME权限。有关详细信息,请参阅使用特殊权限跑步。

用户令牌通常不启用SE_BACKUP_NAME权限。为了满足这一要求,您需要:

  1. 以管理员身份运行
  2. SE_BACKUP_NAME权限添加到您的用户令牌中

您必须遵守的另一个要求是,在调用SaveKey之前,输出文件必须不存在。

有关说明该方法的C++代码,请参阅这篇EDN文章。

下一个变体成功了!

void __fastcall TForm1::Button2Click(TObject *Sender)
{
TRegistry *reg=new TRegistry(KEY_READ);
HANDLE ProcessToken;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &ProcessToken))
{
    SetPrivilege(ProcessToken, SE_BACKUP_NAME, TRUE);
          TRegistry *reg=new TRegistry(KEY_READ);
      reg->RootKey=HKEY_LOCAL_MACHINE;
      reg->SaveKey("Software","D:\1.reg");
      delete reg;
}

}