function SetPrivilege(Enabled:boolean):boolean;
var Priv: TTokenPrivileges;
Token: THandle;
Return: DWORD;
begin
result:=FALSE;
if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, Token) then
exit;
try
ZeroMemory(@Priv, sizeof(Priv));
Priv.PrivilegeCount:=1;
if Enabled then
Priv.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
if not LookupPrivilegeValue(nil, 'SeBackUpPrivilege', Priv.Privileges[0].Luid) then
exit;
if not AdjustTokenPrivileges(Token, FALSE, Priv, 0, nil, Return) then
exit;
if (GetLastError()<>ERROR_SUCCESS) then
exit;
finally
CloseHandle(Token);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var Reg: TRegistry;
begin
SetPrivilege(TRUE);
Reg:=TRegistry.Create;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
DeleteFile('c:\plik');
if Reg.SaveKey('Software\Borland\Delphi', 'c:\plik') then
ShowMessage('OK');
finally
Reg.Free;
end;
SetPrivilege(FALSE);
end;
Musisz grzecznie poprosić system o żeton, by skorzystać z przydzielonego przywileju tworzenia kopii zapasowej :]