Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Hat User Admin-Rechte? (https://www.delphipraxis.net/9998-hat-user-admin-rechte.html)

Motzi 9. Okt 2003 11:59


Hat User Admin-Rechte?
 
Hi,

ich benutze momentan die Funktion von NicoDE mit der ich überprüfen kann, ob ein User über Admin-Rechte verfügt oder nicht. Diese Funktion basiert jedoch auf dem Process-Token des eigenen Processes
Delphi-Quellcode:
OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle)
D.h. Vorraussetzung ist, dass mein Prozess im Kontext des angemeldeten Benutzers läuft dessen Rechte ich überprüfen will.

Mein Programm läuft jetzt jedoch als Service und damit im System-Kontext. Hat jetzt vielleicht wer eine spontane Idee, wie ich dennoch die Rechte des Users überprüfen kann? Meine erste Idee war per GetUserName den Namen des Users zu holen und mir dann per LookupAccountName/LookupAccountSid die SID des Users zu holen.. oder gibts da bessere Varianten? :?

Gregor 9. Okt 2003 12:10

Re: Hat User Admin-Rechte?
 
Ich muss ehrlich sagen das ich mich nicht so gut auskenne in dem Gebiet, aber könnte man nicht den Usernamen irgendwie in der Regestry suchen oder kontrollieren?

Gregor :zwinker:

Mirilin 9. Okt 2003 12:10

Re: Hat User Admin-Rechte?
 
:hi:

Vielleicht hilft dir das :
überprüfen, ob man als Administrator eingeloggt ist?

Motzi 9. Okt 2003 12:14

Re: Hat User Admin-Rechte?
 
Nein leider nicht.. :? die Funktion funktioniert im Prinzip genauso wie die die ich momentan verwendet, sie basiert auf dem Process-Token des eigenen Prozesses, nur bei einem Service ist das eben das System-Token...

Luckie 9. Okt 2003 19:50

Re: Hat User Admin-Rechte?
 
Kuck doch in welcher Gruppe der Benutzer ist.

NicoDE 9. Okt 2003 20:05

Re: Hat User Admin-Rechte?
 
Zitat:

Zitat von Motzi
Mein Programm läuft jetzt jedoch als Service und damit im System-Kontext.

SYSTEM ist auch ein 'Benutzer'-Account. Ich habe auch (irgendwo) eine IsLocalSystem() geschrieben (kanns ja mal suchen...).
Zitat:

Zitat von Motzi
Hat jetzt vielleicht wer eine spontane Idee, wie ich dennoch die Rechte des Users überprüfen kann?

Prüfen, ob das gewünschte Recht aktiviert/aktivierbar ist.
Zitat:

Zitat von Motzi
Meine erste Idee war per GetUserName den Namen des Users

Es kann keinen bis beliebig viele 'interaktive' Benutzer geben (wenn Du das meinst) - insofern ist schwierig, wie Du den/die Benutzer (aus einem nicht-interaktiven Service heraus) finden/auseinanderhalten willst.

Also bleibt die Frage, was genau Du prüfen willst (ich denke es wird auf die Prüfung von aktivierten/aktivierbaren Rechten hinauslaufen - Mitglieder der lokalen Gruppe der Administratoren müssen nicht zwingend 'Admin'-Rechte haben, und andere Benutzer-/Gruppen-/...-Accounts können 'Admin'-Rechte haben...).


Gruß Nico

Christian Seehase 9. Okt 2003 22:48

Re: Hat User Admin-Rechte?
 
Moin Motzi,

schau Dir doch mal die API NetUserGetInfo in Verbindung mit der Struktur USER_INFO_1 an.

Assarbad 9. Okt 2003 23:17

Re: Hat User Admin-Rechte?
 
@Christian: Leider scheitert das dran, daß es absolut nicht zuverlässig ist. Zum Teil werden auch Sessions angezigt, die es nicht mehr gibt (also die irgendwann einen Timeout bekommen werden).

Den interaktiven Benutzer kann man tatsächlich nicht herausfinden. Man könnte versuchen, anhand des DACL der Default WinSta Rückschlüsse zu ziehen, allerdings kann jeder diesen DACL anpassen.

Um zu ermitteln welche Benutzer eingeloggt sind, benutzt man üblicherweise die Registry-Methode. Wenn du Beispielcode brauchst, schau dir mein LoggedOn2 an. Arbeite seit über einem Jahr an einer neuen Version.

NicoDE 10. Okt 2003 00:09

Re: Hat User Admin-Rechte?
 
Wenn die Anfrage eines Benutzers an den Service per NamedPiped erfolgt, sieh Dir ImpersonateNamedPipeClient() an (bei RPC heißt die entsprechende Funktion RpcImpersonateClient() usw. usf.).

Assarbad 10. Okt 2003 00:28

Re: Hat User Admin-Rechte?
 
In einem der älteren PSDKs gab es glaube ich sogar ein Beispiel zu den "neuen" DuplicateHandle() APIs von NT mit einem Beispiel zu Impersonate-APIs


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr.
Seite 1 von 2  1 2      

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