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
|
Re: Hat User Admin-Rechte?
Der Service ist ein interaktiver Service. Es geht im Prinzip darum zu wissen, ob der "vor dem Computer sitzende User" ein Administrator ist oder nicht bzw. neue Überlegung ob er Mitglied einer bestimmten Gruppe ist. Aber diese Überprüfung wäre ja nicht das Problem, sondern eher, wie krieg ich den Benutzer. Meine letzte Idee war über die WindowStation WinSta0 zu gehen...
Vielleicht noch zur Erklärung wozu ich das brauch... vielleicht kennt wer von euch VNC (www.realvnc.com). In dem Institut wo ich grad Zivi mach werden Berufslehrgänge veranstaltet und im EDV-Saal wurde jetzt eben überall dieses VNC installiert um vom Lehrer-PC die Schüler-PCs kontrollieren zu können. Das Problem ist nur, dass das auf den Schüler-PCS das VNC-Symbol im SysTray auftaucht und das sie über dieses eben auch den Service beenden können womit das ganze für die :cat: ist... Deswegen will ich jetzt den Code so umschreiben, dass das Tray-Icon nur dann auftaucht, wenn der angemeldete Benutzer ein Admin ist (bzw. wenn der angemeldete Benutzer kein Schüler ist ;)). [edit=Christian Seehase]Doppelposting gelöscht. Mfg, Christian Seehase[/edit] |
Re: Hat User Admin-Rechte?
RealVNC, TightVNC und UltraVNC sind alle OpenSource. Von daher lohnt es sich, mal einfach das "Feature" mit dem Trayicon rauszupatchen. Der Admin kann dann immer noch explizit die Konfiguration aufrufen. Ansonsten kann man auch mal mit nem Disassembler drüberschauen ;) ... geht vielleicht sogar schneller.
|
Re: Hat User Admin-Rechte?
Thx fürs Doppelposting löschen! ;)
Ich weiß dass RealVNC OpenSource ist, deswegen kann (naja, "können" ;)) und will ichs ja auch ändern! ;) Außerdem will ich dann noch ein paar Kleinigkeiten einbaun über die man etwas mehr Kontroll über die Schüler-PCs hat, aber das bringt alles nix, wenn sie den Service einfach ausschalten können! ;) |
Re: Hat User Admin-Rechte?
Wieso werden den Schülern nicht einfach die Rechte entzogen, den Service zu beenden? Wenn du das Symbol aus der TNA raushaust, können die Pfiffigen immer noch über die Systemsteuerung gehen.
|
Re: Hat User Admin-Rechte?
Nein, über die Systemsteuerung können sie nicht gehen diese Rechte haben sie nämlich sowieso nicht. Aber im Menü des Tray-Icons gibt es eben einen netten Eintrag "Close" über den sich der Service selbst beendet...
|
Re: Hat User Admin-Rechte?
Ach so, der Service beendet sich selbst...
Klar, dann braucht man keine Admin-Rechte. |
Re: Hat User Admin-Rechte?
Man kann dem User Admin Rechte erteilen.
MfG Cloud |
Re: Hat User Admin-Rechte?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 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