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 Beenden eines Prozesses als eingeschränkter User verhindern (https://www.delphipraxis.net/49934-beenden-eines-prozesses-als-eingeschraenkter-user-verhindern.html)

Zacherl 18. Jul 2005 14:24


Beenden eines Prozesses als eingeschränkter User verhindern
 
Hallo,
da ja im Moment in ziemlich vielen Threads über das Thema "Prozess vor dem Taskmanager verstecken" diskutiert wird, wollte ich nun auch meine Frage stellen:
Da das Verstecken insbesondere auch vor alternativen Taskmanagern nicht zuverlässig möglich ist, wollte ich ich wissen, wie ich verhindern kann, dass mein Prozess terminiert wird.
Ich schreibe ein Programm für die Schule und deshalb läuft es mit eingeschränkten Rechten. Im Moment benutze ich einen anderen Prozess, der prüft, ob der Hauptprozess aktiv ist und diesen bei Bedarf neu startet. Da dies aber bei einer geringen Prüfzeit, viele Ressourcen verschwendet, wäre ich über eine alternative Lösung froh.
Vielleicht über ACLs?

Florian

Olli 18. Jul 2005 14:27

Re: Beenden eines Prozesses als eingeschränkter User verhind
 
Immer dran danken, wenn du schon eingeschränkte Rechte hast, gibt es immer einen mit höheren Rechten ;) ...

Das Programm kann im Übrigen weiterhin über den Schließen-Button beendet werden. Zugriff über bestimmte APIs gibt aber ein Access Denied ;)

Zacherl 18. Jul 2005 14:35

Re: Beenden eines Prozesses als eingeschränkter User verhind
 
Ja, die Leute mit Admin Rechten sind eh nur die Lehrer und die haben wohl kaum Interesse das für sie geschriebene Programm unstandardmäßig zu beenden.
Den CloseButton hab ich auch schon mit CanClose = false "deaktiviert".

Hast du vielleicht einen Beispielquelltext, wie man das Beenden des eigenen Prozesses verhindern kann. Ich hab nämlich kaum Erfahrung mit API und schon gar nicht mit ACLs.

Florian

Zacherl 19. Jul 2005 10:53

Re: Beenden eines Prozesses als eingeschränkter User verhind
 
Hallo,
ich hab jetzt was in der MadCollection gefunden, komme aber nicht so recht mit klar...
Ich wäre sehr froh über ein Beispiel! (mit der ohne MadCollection).

Danke Florian

alcaeus 19. Jul 2005 11:05

Re: Beenden eines Prozesses als eingeschränkter User verhind
 
Um es zuverlaessig zu machen gibt es so genannte "Watchdogs". Die APIs fuers Schliessen zu hooken ist AFAIC nicht ohne weiteres moeglich, also geht man einen anderen Weg.
Du hast deine Anwendung (A) die etwas bestimmtes macht. Nun startest du darin einen Thread, welches prueft, ob ein bestimmtes Programm (B) laeuft. Wenn es nicht gestartet ist, dann hoch damit. Dieser Check sollte ca. 1 mal pro Sekunde gemacht werden: also einmal die PID holen und dann nur noch einen Aufruf von MSDN-Library durchsuchenOpenProcess machen. Schlaegt der fehl, startest du schnellstens Programm B.
Programm B hat nun die Aufgabe, A zu ueberwachen. Dies geschieht gleich wie oben, d.h. wenn A nicht laeuft, wirds gestartet. So, wenn du jetzt einen der Prozesse ueber den Taskmanager abschiesst, wird der andere Prozess diesen sofort wieder starten.

Schoenere Moeglichkeit das Beenden der Anwendung zu verhindern: Je nach Sinn und Zweck des Programms kannst du dieses als Dienst implementieren. Dazu noch ein Panel, damit gearbeitet werden kann. Ein Normalbenutzer kann keine Dienste beenden, also bist du damit sicher ;)

Greetz
alcaeus

brechi 19. Jul 2005 11:12

Re: Beenden eines Prozesses als eingeschränkter User verhind
 
schreib doch einen Service? müsste doch damit gehen, den kannste als Admin installierne undm it eingeschränkten rechten auch net beenden...
Wenn ich Müll laber sagt bescheid, hab noch net einen Service geschrieben :P

Zacherl 19. Jul 2005 11:13

Re: Beenden eines Prozesses als eingeschränkter User verhind
 
Danke!
Das mit dem Dienst ist eine gute Idee! Wie kann ich denn mein Programm als Dienst festlegen lassen?Das Programm sollte sich unter eingeschränkten Rechten als Dienst eintragen lassen, ist aber nicht so wichtig.

So wie du es oben beschrieben hast, mit den 2 Prozessen, die sich gegenseitig starten mache ich das im Moment. Da aber die Schulrechner nicht grade modern sind, geht ziemlich viel Performance drauf ...

Florian

alcaeus 19. Jul 2005 11:23

Re: Beenden eines Prozesses als eingeschränkter User verhind
 
Zitat:

Zitat von Florian Bernd
Das mit dem Dienst ist eine gute Idee! Wie kann ich denn mein Programm als Dienst festlegen lassen?Das Programm sollte sich unter eingeschränkten Rechten als Dienst eintragen lassen, ist aber nicht so wichtig.

Das ist unmoeglich. Der Dienst muss von einem Hauptbenutzer oder Admin eingetragen werden, und kann auch nur von diesen wieder entfernt werden. ;)

Zitat:

Zitat von Florian Bernd
So wie du es oben beschrieben hast, mit den 2 Prozessen, die sich gegenseitig starten mache ich das im Moment. Da aber die Schulrechner nicht grade modern sind, geht ziemlich viel Performance drauf ...

Hmm...auf meinem 800er-Testrechner hab ich damals nichts gemerkt. Ich muesste aber die Sourcen mal raussuchen um eine genauere Antwort geben zu koennen...

Greetz
alcaeus

Olli 19. Jul 2005 12:31

Re: Beenden eines Prozesses als eingeschränkter User verhind
 
Zitat:

Zitat von alcaeus
Du hast deine Anwendung (A) die etwas bestimmtes macht. Nun startest du darin einen Thread, welches prueft, ob ein bestimmtes Programm (B) laeuft. Wenn es nicht gestartet ist, dann hoch damit. Dieser Check sollte ca. 1 mal pro Sekunde gemacht werden: also einmal die PID holen und dann nur noch einen Aufruf von MSDN-Library durchsuchenOpenProcess machen. Schlaegt der fehl, startest du schnellstens Programm B.
Programm B hat nun die Aufgabe, A zu ueberwachen. Dies geschieht gleich wie oben, d.h. wenn A nicht laeuft, wirds gestartet. So, wenn du jetzt einen der Prozesse ueber den Taskmanager abschiesst, wird der andere Prozess diesen sofort wieder starten.

Mit Verlaub, das ist sinnlos. Wenn du es machen willst, dann gleich über einen Launcher. Der kann bspw. mit ShellExecuteAndWait() oder ähnlichen Funktionen in einer Schleife die Anwendung B immer neu starten. Denn dank der Wait-Funktionen bekommt ShellExecuteAndWait() ja mit, ob und wann sich der "Kindprozeß" (also Programm B) beendet.

ATH0 19. Jul 2005 15:19

Re: Beenden eines Prozesses als eingeschränkter User verhind
 
Ein Watchdog-Verfahren lässt sich doch leicht aushebeln. Auch mit Hausmitteln.

Einfach n Batch-Job schreiben, dass versucht in einem Loop beide exen zu killen. (kill.exe WinXP PRo only)
oder ein Batch-Job, das versucht einen der beiden Prozesse zu renamen in einer loop. Dann im Taskmanager den einen killen und er wird schnell renamed, bevor er executed werden kann.

EDIT: Aber probieren geht über studieren. Ich mach das mal heut abend.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz