Einzelnen Beitrag anzeigen

hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Debuggen als Administrator

  Alt 7. Nov 2006, 10:08
Hallo,

dein Programm sollte sich die Rechte nach Start holen,
und zwar auch nur dann, wenn sie benötigt werden.
Spätestens ab Visa ist das eh Standard.
Also Bsp-weise für Setzen der Zeit.

Delphi-Quellcode:
if not SetPrivilege('SE_SYSTEMTIME_NAME', True) then
begin
  // logging
end;

try
  if SetLocalTime(tdtTime)=False then
  begin
    // logging ?
  end;
finally
  SetPrivilege('SE_SYSTEMTIME_NAME', False);
end;
Delphi-Quellcode:
{ Privileg setzen
  für Zeit muß SE_SYSTEMTIME_NAME übergeben werden }

function SetPrivilege(const sPrivilegeName: String;
  bEnabled : boolean): boolean;
var
 TPPrev,TP : TTokenPrivileges;
 Token : THandle;
 dwRetLen : DWord;
begin
 Result := False;

 try
  {$IFDEF VER90}
    { in Delphi2 ist OpenProcessToken mit PHandle deklariert }
   OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or
                                      TOKEN_QUERY,@Token);
  {$ELSE}
    { in > Delphi2 ist OpenProcessToken mit var THandle deklariert }
   OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or
                                      TOKEN_QUERY,Token);
  {$ENDIF}
   TP.PrivilegeCount := 1;
   if( LookupPrivilegeValue(Nil, PChar( sPrivilegeName ),
                                 TP.Privileges[ 0 ].LUID )) then
    begin
    if (bEnabled) then
     begin
     TP.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
     end
    else
     begin
     TP.Privileges[ 0 ].Attributes :=0;
     end;
    dwRetLen := 0;
    Result := AdjustTokenPrivileges(Token,False,TP,SizeOf( TPPrev ),
                                   TPPrev,dwRetLen );
    end;
    CloseHandle( Token );
  except
  end;
end;

Heiko
Heiko
  Mit Zitat antworten Zitat