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