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:
D.h. Vorraussetzung ist, dass mein Prozess im Kontext des angemeldeten Benutzers läuft dessen Rechte ich überprüfen will.
OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle)
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? :? |
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: |
Re: Hat User Admin-Rechte?
|
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...
|
Re: Hat User Admin-Rechte?
Kuck doch in welcher Gruppe der Benutzer ist.
|
Re: Hat User Admin-Rechte?
Zitat:
Zitat:
Zitat:
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 |
Re: Hat User Admin-Rechte?
Moin Motzi,
schau Dir doch mal die API NetUserGetInfo in Verbindung mit der Struktur USER_INFO_1 an. |
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. |
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.).
|
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. |
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