Je souhaite faire utiliser la fonction RestoreKey. Je doit conformément à la doc MSDN configurer les privilèges en RESTORE et BACKUP. J'ai donc fait ce code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
function SetPrivilege (hProcess : THANDLE; privilege : String; Enable : Boolean) : Boolean ;
Var
  Info  : TTokenPrivileges;
  Token : THandle;
  Res   : Boolean;
  h     : DWORD;
begin
  Result := False ;
  // Ouverture des droits
  Res := OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, Token);
 
  if Res
  then begin
      Info.PrivilegeCount := 1;
 
      if  Enable
      then
          Info.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
      else
          Info.Privileges[0].Attributes := 0 ;
 
      // Get LUID.
      Res := LookupPrivilegeValue(nil, PChar(privilege), Info.Privileges[0].Luid) ;
 
      if Res
      then begin
          Res := AdjustTokenPrivileges(Token, False, Info, 0, PTokenPrivileges(nil)^, h) ;
 
          if Res
          then begin
              if GetLastError = ERROR_SUCCESS
              then
                  Result := True
              else
                  ErrorStd('Can''t setup privilege right. Check security policies')
          end
          else
              ErrorStd('Can''t setup privilege') ;
      end
      else
          ErrorStd('Can''t set right') ;
  end
  else
      ErrorStd('Can''t get right') ;
 
 
  CloseHandle(Token) ;
End;
 
// Setup backup privilege with NT/2000/XP
function SetBackupPrivilege (hProcess : THANDLE; Enable : Boolean) : Boolean ;
begin
    Result := SetPrivilege (hProcess, 'SeBackupPrivilege', Enable)
end ;
 
// Setup backup privilege with NT/2000/XP
function SetRestorePrivilege (hProcess : THANDLE; Enable : Boolean) : Boolean ;
begin
    Result := SetPrivilege (hProcess, 'SeRestorePrivilege', Enable)
end ;
 
procedure ImportKey(Registre : TRegistry; key : TStrings; directory : string) ;
Var tmp : string ;
begin
    if key[1] = '-f'
    then begin
        key.Delete(1);
        DeleteFile(key[1]) ;
    end
    else begin
        write('Are-you sur you want import ? [Yes/No]') ;
        readln(tmp) ;
 
        if LowerCase(tmp) = 'n'
        then
            exit ;
 
        DeleteFile(key[1]) ;
    end ;
 
    key[2] := CompleteArguments(key[2], directory) ;
 
    SetBackupPrivilege(GetCurrentProcess, True);
    SetRestorePrivilege(GetCurrentProcess, True);
 
    if not Registre.RestoreKey(key[2], key[1])
    then begin
        ErrorStd('Unabled to read file or write in registry') ;
    end ;
 
    SetRestorePrivilege(GetCurrentProcess, False);
    SetBackupPrivilege(GetCurrentProcess, False);
end ;
J'ai bien les droits mais la fonction echoue en me disant qu'un appèle système a échoué.
Quelqu'un a-t-il eu le problème ? Je n'ai rien rouvé sur internet.