我是在win2000 professional下编写的以下两段程序,但是保存的文件都是0字节,没有保存成功,请高手指教是什么原因procedure TForm1.BitBtn3Click(Sender: TObject);
var
 RootKey,phKey: hKey;
 KeyName,sKeyFileName: String;
 FileName: pchar;
begin
 RootKey := HKEY_LOCAL_MACHINE;
 KeyName := 'software\myreg'; RegOpenKeyEx(RootKey, PChar(KeyName), 0, KEY_ALL_ACCESS, phKey); sKeyFileName := 'D:\myreg2'; StrPCopy(FileName,sKeyFileName); if RegSaveKey(phKey, FileName, nil)= 0 then
   ShowMessage('导出成功')
 else
   ShowMessage('导出失败'); RegCloseKey(phKey);
end;procedure TForm1.BitBtn4Click(Sender: TObject);
var
  reg : Tregistry;
begin
  reg := Tregistry.Create;
  reg.Access:=KEY_ALL_ACCESS;
  reg.rootkey := HKEY_LOCAL_MACHINE;
  reg.OpenKey('software\myreg',false);
  reg.Savekey('software\myreg','D:\myreg1');
  reg.CloseKey;
end;

解决方案 »

  1.   

    你没有SE_BACKUP_NAME权限。另外:
    StrPCopy(FileName,sKeyFileName);应该去掉,if RegSaveKey(phKey, FileName, nil)= 0 then
       改为:
    if RegSaveKey(phKey, PChar(sKeyFileName), nil)= 0 then————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
       
      

  2.   

    最后可改为这样:procedure TForm1.Button1Click(Sender: TObject);
    var
      RootKey,phKey: hKey;
      KeyName,sKeyFileName: String;
      hToken: THandle;
      tkp: TOKEN_PRIVILEGES;
      ReturnLength: DWord;
    begin
      if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_ALL_ACCESS or TOKEN_QUERY, hToken) then
      begin
        LookupPrivilegeValuew(nil, 'SeBackupPrivilege', tkp.Privileges[0].Luid);
        tkp.PrivilegeCount := 1;
        tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        AdjustTokenPrivileges(hToken, FALSE, tkp, 0, nil, ReturnLength);
      end;
      RootKey := HKEY_LOCAL_MACHINE;
      KeyName := 'software\myreg';
      if RegOpenKeyEx(RootKey, PChar(KeyName), 0, KEY_ALL_ACCESS, phKey) = ERROR_SUCCESS then
      begin
        sKeyFileName := 'g:\myreg2';
        if RegSaveKey(phKey, PChar(sKeyFileName), nil)= 0 then
          ShowMessage('导出成功')
        else
          ShowMessage('导出失败');
        RegCloseKey(phKey);
      end;
    end;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  3.   

    请问lxpbuaa(桂枝香在故国晚秋) ,怎么分配SE_BACKUP_NAME权限?????请给我写一下源码,谢谢
      

  4.   

    非常感谢lxpbuaa(桂枝香在故国晚秋) ,这个问题已经解决,那么我要是用TRegistry的SaveKey又应该怎么写呢??????