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 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

Motzi 10. Okt 2003 07:39

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]

Assarbad 10. Okt 2003 11:47

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.

Motzi 10. Okt 2003 12:27

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! ;)

Chewie 10. Okt 2003 14:41

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.

Motzi 10. Okt 2003 15:50

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...

Chewie 10. Okt 2003 15:54

Re: Hat User Admin-Rechte?
 
Ach so, der Service beendet sich selbst...
Klar, dann braucht man keine Admin-Rechte.

CloudStrife 10. Okt 2003 16:04

Re: Hat User Admin-Rechte?
 
Man kann dem User Admin Rechte erteilen.

MfG Cloud

Motzi 10. Okt 2003 19:01

Re: Hat User Admin-Rechte?
 
Zitat:

Zitat von CloudStrife
Man kann dem User Admin Rechte erteilen.

Aber nur als Admin ;) Der User selber kann das nicht!


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