Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Privilegien setzen (https://www.delphipraxis.net/47372-privilegien-setzen.html)

runger 10. Jun 2005 07:04


Privilegien setzen
 
Hallo,
ich habe Luckies Funktion zur Änderung der Privilegien ausprobiert.

Delphi-Quellcode:
function EnablePrivilege(const Privilege: string; fEnable: Boolean; out
  PreviousState: Boolean): DWORD;
var
  Token       : THandle;
  NewState    : TTokenPrivileges;
  Luid        : TLargeInteger;
  PrevState   : TTokenPrivileges;
  Return      : DWORD;
begin
  PreviousState := True;
  if (GetVersion() > $80000000) then
    // Win9x
    Result := ERROR_SUCCESS
  else
  begin
    // WinNT
    if not OpenProcessToken(GetCurrentProcess(), MAXIMUM_ALLOWED, Token) then
      Result := GetLastError()
    else
    try
      if not LookupPrivilegeValue(nil, PChar(Privilege), Luid) then
        Result := GetLastError()
      else
      begin
        NewState.PrivilegeCount := 1;
        NewState.Privileges[0].Luid := Luid;
        if fEnable then
          NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
        else
          NewState.Privileges[0].Attributes := 0;
        if not AdjustTokenPrivileges(Token, False, NewState,
          SizeOf(TTokenPrivileges), PrevState, Return) then
          Result := GetLastError()
        else
        begin
          Result := ERROR_SUCCESS;
          PreviousState :=
            (PrevState.Privileges[0].Attributes and SE_PRIVILEGE_ENABLED <> 0);
        end;
      end;
    finally
      CloseHandle(Token);
    end;
  end;
end;



procedure TForm1.Button1Click(Sender: TObject);
var a:boolean;x:dword;
begin
  x:=EnablePrivilege('SE_SYSTEMTIME_NAME',false,a);
end;
Ich werde immer hier rausgeworfen. Egal was ich an Privileg eingebe.
Was mach ich falsch?

Delphi-Quellcode:
    try
      if not LookupPrivilegeValue(nil, PChar(Privilege), Luid) then
        Result := GetLastError()
      else
Rainer

MathiasSimmack 10. Jun 2005 09:29

Re: Privilegien setzen
 
Hallo. Ich habe eben mal in die Win32-API-Tutorials geguckt, weil es dort im Kapitel "Systemfunktionen/Datum und Uhrzeit" einen ähnlichen Beitrag gibt. Dort sieht das aber so aus:
Delphi-Quellcode:
const
  SE_SYSTEMTIME_NAME = 'SeSystemtimePrivilege';

{ ... }

if(SetPrivilege(SE_SYSTEMTIME_NAME,true)) then
  SetLocalTime(st);
SE_SYSTEMTIME_NAME ist bloß eine Konstante, wie du siehst. Das tatsächliche Privileg heißt anders. :stupid: Wirf am besten mal einen Blick in die Headerdateien (*.h) des PSDK.

Wobei ich dir aber jetzt schon sagen kann, dass das Setzen der Uhrzeit oder des Datums nicht von den Rechten abhängt. Da behauptet diese veraltete Win32.hlp etwas Falsches. Das weiß ich, weil besagter Teil aus den Tutorials aus meiner Feder stammt. :???: Tatsächlich dürfen nur Administratoren und Hauptbenutzer die Uhrzeit ändern. Das findest du in den Richtlinien. Notfalls musst du deinen Benutzer da noch eintragen.

runger 10. Jun 2005 10:04

Re: Privilegien setzen
 
Hallo Mathias,

danke für deinen Beitrag. Ich hab das ganze auch nur als Spielerei gesehen, mir kams überhaupt nicht auf die Zeit an. Ich wollte nur wissen wie man sowas macht.

Rainer

runger 10. Jun 2005 10:07

Re: Privilegien setzen
 
Hallo Mathias,

das wars!

Danke
Rainer


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz