Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Privilegien für Dienst Stop/Start (https://www.delphipraxis.net/192583-privilegien-fuer-dienst-stop-start.html)

Hobbycoder 2. Mai 2017 16:24


Privilegien für Dienst Stop/Start
 
Hi,

mit dieser Funktion http://www.delphipraxis.net/29-abmel...-98-me-nt.html demonstriert Daniel wie man sich die Privilegien für Shutdown, Reboot, etc. holt.

Könnte gleiches auch für das Stoppen und Starten von Diensten funktionieren? Dann natürlich nicht mit SeShutdownPrivilege, sondern mit einem anderen PrivilegeName.

himitsu 2. Mai 2017 16:43

AW: Privilegien für Dienst Stop/Start
 
Jupp.
Privileg ist Privileg.

Du brauchst nur auch noch das Privileg um dir das andere gewünchte Privileg holen zu dürfen, sonst bekommst du es nicht.
Das heißt, der/ein Benutzer muß das Privileg besitzen und dann kann sich die Anwendung es auch holen.

Hobbycoder 2. Mai 2017 16:54

AW: Privilegien für Dienst Stop/Start
 
Aber wie komme ich an den PrivilegeName? Danial hat das ja in seinem Beispiel "hard coded" drin. Im MSDN sind die nicht aufgeführt bzw. hab ich's nicht gefunden.

Zacherl 2. Mai 2017 17:02

AW: Privilegien für Dienst Stop/Start
 
Die einzelnen Privilegien findest du hier:
https://docs.microsoft.com/en-us/win...hts-assignment

Speziell für Services habe ich allerdings nichts gesehen auf den ersten Blick.

Dalai 2. Mai 2017 17:04

AW: Privilegien für Dienst Stop/Start
 
Selbstverständlich gibt's eine Liste der Privilegien: Privilege Constants. Aber ich seh da nix in Richtung Starten/Stoppen von Diensten. Ist eigentlich auch logisch, denn jedes Objekt im Windows - und damit auch jeder Dienst - kann separate Zugriffsrechte haben, so dass dir ein Recht zum Ändern des Dienststatus nicht für alle Dienste etwas bringen muss.

Grüße
Dalai

Hobbycoder 2. Mai 2017 17:08

AW: Privilegien für Dienst Stop/Start
 
Das ist aber Jammerschade.
Weil z.Zt. geht's halt nur, wenn ich die Anwendung explizit "Als Administrator" ausführe. Das sollte aber nicht Sinn und Zweck des ganzen sein.
Und da ein Manifest zu erstellen, dass sie immer als Admin startet möchte ich eigentlich auch vermeiden.

Dalai 2. Mai 2017 17:25

AW: Privilegien für Dienst Stop/Start
 
Dann erstell dir ein kleines Hilfsprogramm, das besagtes Manifest beinhaltet und von deinem regulären Programm aufgerufen wird. Das kann man auch so gestalten, dass das Hilfsprogramm den Dienstnamen und die Operation (Starten/Stoppen) per Parameter entgegennimmt.

Alternativ kannst du auch ein bereits existierendes Hilfsprogramm einbinden (sofern das dessen Lizenz erlaubt, wenn du dein Programm weitergibst), z.B. psservice.exe oder das schon im Windows vorhandene sc.exe. Ausführen solcher Hilfsprogramme geht mit ShellExecute(Ex) - das Verb runas erlaubt das Starten (fast) beliebiger Programme als Administrator.

Grüße
Dalai

himitsu 2. Mai 2017 17:44

AW: Privilegien für Dienst Stop/Start
 
Die API zum Starten/Stoppen haben noch einen Parameter für ein Rechte-Token.
Du kannst ja schauen, ob du an ein Token ran kommst, mit den nötigen Privilegien/Rechten. Es muß nicht die ganze Anwendung diese Rechte besitzen.

Wie startest du denn den Service?
PS: Lies auch mal die Remarks. https://msdn.microsoft.com/de-de/lib.../ms684323.aspx

Hobbycoder 2. Mai 2017 18:02

AW: Privilegien für Dienst Stop/Start
 
So http://www.delphipraxis.net/88581-di...-abfragen.html in einer für meine Zwecke angepassten Version.

Es soll auch nicht die ganze Anwendung Adminrechte haben. Das wär nur die Holzhammermethode.

himitsu 2. Mai 2017 23:26

AW: Privilegien für Dienst Stop/Start
 
Wie schon erwähnt, kann man sich selber oder eine zusätzliche kleine Anwendung via runas und/oder AdminManifest starten, als Hintergundanwendung mit UAC-Abfrage.

Oder man hat das Privileg zur Impersonation und kann "kurzzeitig" einen Thread mit anderen/höheren Rechten laufen lassen.
http://michael-puff.de/Programmierun...ersonate.shtml

PS: Für Beides gibt es auch einen passenden Button-Style, damit der User gleich Bescheid weiß, was beim Drücken passiert.
Delphi-Referenz durchsuchenTButton.ElevationRequired


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:55 Uhr.
Seite 1 von 2  1 2      

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