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 Wie kann ein Dienst feststellen, wer ihn gerade benutzt? (https://www.delphipraxis.net/110955-wie-kann-ein-dienst-feststellen-wer-ihn-gerade-benutzt.html)

gpvg 27. Mär 2008 10:18


Wie kann ein Dienst feststellen, wer ihn gerade benutzt?
 
Der Dienst läuft als Benutzer SYSTEM auf dem PC des Anwenders. Was ich benötige, ist eine Funktion, die vom Programm des Benutzers aufgerufen wird und eine Funktion, die der Dienst aufruft, um den Benutzer zu ermitteln. Also im Prinzip ein ganz simples "Wer will da was von mir?".

Weiß jemand, wie das geht?

Bisher habe ich die Anwendung immer so geschrieben, daß sie ihre Wünsche an den Dienst in eine Datei schrieb, die dieser auslas. In dieser Datei stand dann auch immer der Benutzername. Diese Methode ist in einer Umgebung, die ein wenig Sicherheit erfordert, allerdings unbrauchbar.

hoika 27. Mär 2008 10:38

Re: Wie kann ein Dienst feststellen, wer ihn gerade benutzt?
 
Hallo,

zu Dienste-Komminukation fällt mir memory mapped file, oder pipes ein.

Zu deinem Nutzerproblem gar nichts.
Es könnte ja auch ein Dienst sein, der deinen Dienst nutzt,
da muss kein Nutzer angemeldet sein.


Heiko

wido 27. Mär 2008 10:41

Re: Wie kann ein Dienst feststellen, wer ihn gerade benutzt?
 
Soweit ich weiß gibt es da keine Möglichkeit herauszufinden wer da was von Dir will. Zumindest nicht wenn Du bei deinem Dateiansatz bleiben willst. Du kannst aber bei diversen IPC Methoden wie z.B. Named Pipes oder prinzipiell auch bei deiner "Dateilösung" über ACLs den Zugriff auf deine Ressourcen für bestimmte Benutzer- und Benutzergruppen definieren, so daß bestimmte Benutzer die Datei/Pipe gar nicht erst öffnen können. Das wäre die sauberste Variante. Nun ist natürlich die Frage, ob Dir so eine Auflösung bis auf Benutzerebene reicht oder ob Du noch exakt den Prozess haben willst, der da was von Dir will.

gpvg 27. Mär 2008 12:08

Re: Wie kann ein Dienst feststellen, wer ihn gerade benutzt?
 
Zitat:

Zitat von wido
Soweit ich weiß gibt es da keine Möglichkeit herauszufinden wer da was von Dir will. Zumindest nicht wenn Du bei deinem Dateiansatz bleiben willst. Du kannst aber bei diversen IPC Methoden wie z.B. Named Pipes oder prinzipiell auch bei deiner "Dateilösung" über ACLs den Zugriff auf deine Ressourcen für bestimmte Benutzer- und Benutzergruppen definieren, so daß bestimmte Benutzer die Datei/Pipe gar nicht erst öffnen können. Das wäre die sauberste Variante. Nun ist natürlich die Frage, ob Dir so eine Auflösung bis auf Benutzerebene reicht oder ob Du noch exakt den Prozess haben willst, der da was von Dir will.

Ich muß noch ein wenig genauer werden. Es gibt ein Gruppe, die den Dienst benutzen darf. Über Berechtigungen ließe sich natürlich der Zufriff auf die Datei (oder Pipe, oder Registryeintrag ...) regeln. Nur müßte der Dienst für jeden Benutzer aus dieser Gruppe eine eigene Datei kontrollieren. Ist bei vielen Benutzern nur eine unnötige Belastung des Systems.

Daher halte ich den Ansatz für praktikabler, erst einmal den Benutzer zu ermitteln, dann seine Gruppenzugehörigkeit zu ermitteln und dann zu entscheiden, ob der Benutzer auch zur Nuzung berechtigt ist.

wido 27. Mär 2008 13:27

Re: Wie kann ein Dienst feststellen, wer ihn gerade benutzt?
 
Zitat:

Zitat von gpvg
Ich muß noch ein wenig genauer werden. Es gibt ein Gruppe, die den Dienst benutzen darf. Über Berechtigungen ließe sich natürlich der Zufriff auf die Datei (oder Pipe, oder Registryeintrag ...) regeln. Nur müßte der Dienst für jeden Benutzer aus dieser Gruppe eine eigene Datei kontrollieren. Ist bei vielen Benutzern nur eine unnötige Belastung des Systems.

Der Service müsste mitnichten für jeden Benutzer eine eigene Datei kontrollieren. Wozu hast Du sie denn in eine Gruppe getan? Du musst nicht mal für mehrere Gruppen mehrere Dateien benutzen, weil Du mehrere Gruppen hinzufügen kannst zu deiner ACL. Ist ja nicht so, daß so ne ACL nur einen Eintrag zulassen könnte.

Zitat:

Zitat von gpvg
]Daher halte ich den Ansatz für praktikabler, erst einmal den Benutzer zu ermitteln, dann seine Gruppenzugehörigkeit zu ermitteln und dann zu entscheiden, ob der Benutzer auch zur Nuzung berechtigt ist.

Der praktikabelste Ansatz ist, Windows mitzuteilen, wer mit deinem Service kommunizieren darf und wer nicht, und Windows das Rechtemanagement durchführen zu lassen. Dann brauchst Du Dich um das Geraffel nämlich gar nicht mehr zu kümmern.

Ich halte es übrigens für nicht sinnvoll IPC mit dem Service über Dateien zu realisieren. Gibt da durchaus bessere Mechanismen wie z.B. Named Pipes.

Ansonsten wäre es sinnvoll, wenn Du ein paar Informationen rausrückst wie sich deine Situation darstellt und was genau Du implementieren willst. Derweil wirkt das alles so Wischiwaschi irgendwie :).

gpvg 30. Mär 2008 20:15

Re: Wie kann ein Dienst feststellen, wer ihn gerade benutzt?
 
Zitat:

Zitat von wido
Der praktikabelste Ansatz ist, Windows mitzuteilen, wer mit deinem Service kommunizieren darf und wer nicht, und Windows das Rechtemanagement durchführen zu lassen. Dann brauchst Du Dich um das Geraffel nämlich gar nicht mehr zu kümmern.

Wenn ich eine Gruppe mit den Mitgliedern A und B habe, so weiß der Dienst dann noch immer nicht, ob es A oder B war, der da etwas will.

Ansonsten ist es natürlich hilfreich, die Nutzung gleich über die Rechteverwaltung von Windows zu beschränken. Aber auch hier stellt sich für mich die Frage, wie man das in Delphi realisiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:05 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