AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Beenden eines Prozesses als eingeschränkter User verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

Beenden eines Prozesses als eingeschränkter User verhindern

Ein Thema von Zacherl · begonnen am 18. Jul 2005 · letzter Beitrag vom 21. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Beenden eines Prozesses als eingeschränkter User verhindern

  Alt 18. Jul 2005, 15:24
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
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: Beenden eines Prozesses als eingeschränkter User verhind

  Alt 18. Jul 2005, 15:27
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
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Beenden eines Prozesses als eingeschränkter User verhind

  Alt 18. Jul 2005, 15:35
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
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: Beenden eines Prozesses als eingeschränkter User verhind

  Alt 19. Jul 2005, 11:53
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
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: Beenden eines Prozesses als eingeschränkter User verhind

  Alt 19. Jul 2005, 12:05
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#6

Re: Beenden eines Prozesses als eingeschränkter User verhind

  Alt 19. Jul 2005, 12:12
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
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

Re: Beenden eines Prozesses als eingeschränkter User verhind

  Alt 19. Jul 2005, 12:13
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
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

Re: Beenden eines Prozesses als eingeschränkter User verhind

  Alt 19. Jul 2005, 12:23
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 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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#9

Re: Beenden eines Prozesses als eingeschränkter User verhind

  Alt 19. Jul 2005, 13:31
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.
  Mit Zitat antworten Zitat
ATH0

Registriert seit: 18. Jul 2005
8 Beiträge
 
#10

Re: Beenden eines Prozesses als eingeschränkter User verhind

  Alt 19. Jul 2005, 16:19
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:30 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