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 Windows Dienst installieren und starten mit Berechtigungen (https://www.delphipraxis.net/114075-windows-dienst-installieren-und-starten-mit-berechtigungen.html)

Trille 19. Mai 2008 13:02


Windows Dienst installieren und starten mit Berechtigungen
 
Hallo allerseits,
ich möchte mir einen Windows-Dienst erstellen, der beim Starten eine Applikation ausführt. Das habe ich mit ShellExecute gemacht.
(Dazu habe ich auch eine Frage, dazu später mehr). Nun möchte ich aber, dass der Dienst nur von einem Administrator installiert werden kann, jedoch von "normalen Benutzern" gestartet werden kann.

Folgende Fragen habe ich dazu:

I: Was übergibt man in der shellExecute als Handle? Ich habe viele Beispiele gefunden, wo einfach nur HANDLE übergeben wird, jedoch ist bei mir (bei einem Service) diese Variable nicht definiert. Von daher habe ich 0 genommen. Ist das in Ordnung?

II: Sind die Ereignisse beforeInstall und onStart die passenden Ereignisse, um die Berechtigungen zu überprüfen und ggf. den Installationsvorgang bzw. den Start zu verhindern?

III: Wie bekomme ich heraus, ob ein Benutzer Administrator ist bzw ob der normaler, angemeldeter Benutzer ist? Ist die Methode Windows.GetUserObjectSecurity() hier hilfreich?

Da ich auf dem Gebiet Windows und Dienste nicht sehr bewandert bin, möge man mir meine wahrscheinlich dummen Fragen verzeihen. Eine Suche im Forum und bei Google hat da leider auch nicht viel dran geändert.

Fussball-Robby 19. Mai 2008 13:05

Re: Windows Dienst installieren und starten mit Berechtigung
 
Normalerweise macht man hier pro Frage einen Thread auf :wink:
Zu I. (Self.)Handle ist das Handle der Form, von welcher die ausgeführte Methode stammt. Da dein Dienst wahrscheinlich kein Fenster hat, hat er auch kein Handle. Was anderes außer 0 bleibt dir da imho nicht übrig.

SirThornberry 19. Mai 2008 13:07

Re: Windows Dienst installieren und starten mit Berechtigung
 
1.) ShellExecute innerhalb eines Service solltest du ganz schnell vergessen. Wenn du dort ein Programm startest hat dieses Programm keinen Desktop etc. und ist somit niemals sichtbar.
2.) Die Ereignisse sind nicht der Richtige Ort. Denn das Windowsrechtesystem regelt das nur Administratoren Dienste Starten, Stoppen etc. dürfen. Du musst dir also etwas anderes überlegen.
3.) hat sich eigentlich durch zweitens erledigt.

4.) Es gilt - Eine Frage pro Thread damit es übersichtlich bleibt. Zudem kann dann für jede Frage der entsprechend aussagekräftige Titel gewählt werden.

bitte mache für jede Frage einen eigenen Thread auf :-) Wie du schon bei Punkt 1 siehst, ist das was du vorhast wohl nicht ganz so einfach. Entsprechend werden deine Fragen wohl sehr umfangreich diskutiert und bei mehreren Fragen durcheinander wird das dann irgendwann ein riesen Durcheinander.

Luckie 19. Mai 2008 13:12

Re: Windows Dienst installieren und starten mit Berechtigung
 
Lies dir am besten erst mal elementare Grundlagen bezüglich der Windows Sicherheit an und wie sie funktioniert, sonst gibt das nichts. Ich weise heute bestimmt schon zum dritten mal daraufhin, dass ein Dienst in einer anderen WindowsStation läuft und somit keinen Zugriff auf die Desktops in deiner interaktiven WindowsStation. Das mit Shellexecute gestartete Programm dürftes du deshalb nie zu sehen bekommen.

Ein Dienst kann nur von einem Administrator gestartet oder gstoppt werden. Bei sowas immer fragen: "Was wäre wenn...?" Könnte ein normaler Benutzer Dienste starten und stoppen, wäre die ganze Benutzerverwaltung und das Rechtesystem für den Popo. Denn dann könnte er die Firewall und den Virenscanner einfach ausschalten und mit dem Starten eines Dienstes sich selber höhere Benutzerrechte verschaffen. Von Sicherheit bleibt dann nicht mehr viel übrig.

Um zu ermitteln, ob ein Benutzer zur Gruppe der Adminsitratoren gehört bzw. administartive Rechte besitzt gibt es mehrer Methoden. Sie sollten mit der Forensuche relativ leicht zu finden sein.


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