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 ; |
Partager