Entwickler-Ecke
Windows API - Vor dem Beenden mit dem TaskManager eine Prozedur aufrufen?
Syngel Kid - Fr 09.07.04 18:32
Titel: Vor dem Beenden mit dem TaskManager eine Prozedur aufrufen?
Hey,
Wenn der Benutzer im Task Manager unter Prozesse geht und dort mein Programm beendet,
wie kann ich vor dem Beenden noch eine Prozedur aufrufen?
Mit "OnClose" geht es nicht, mit OnCloseQuery kann ich es höchstens beim "Task Beenden" auslösen...
Gibt es den keine Möglichkeit?
MfG Syngel Kid
MSCH - Fr 09.07.04 19:17
imho nein, da der gesamte Prozess gekillt wird und die Application davon nichts mitbekommt.
grez
msch
Anonymous - Fr 09.07.04 19:39
Kann man die Prozess-Killer-Fkten hooken? Dürfte (im Sinne von erlaubt sein) zwar imho nicht möglich sein, aber wer weiß...?
raziel - Fr 09.07.04 19:52
| obbschtkuche hat folgendes geschrieben: |
| Kann man die Prozess-Killer-Fkten hooken? Dürfte (im Sinne von erlaubt sein) zwar imho nicht möglich sein, aber wer weiß...? |
Habs grad ausprobiert... ;-) Einfach die Funktion
TerminateProcess Hooken und schon funktionierts...!
raziel
Anonymous - Fr 09.07.04 20:00
Au, das tut weh.
Und was passiert nu wenn ich das ganze einfach mal... nicht weiterleite wenn Process = GetCurrentProcess? :shock:
raziel - Fr 09.07.04 20:08
| obbschtkuche hat folgendes geschrieben: |
Au, das tut weh.
Und was passiert nu wenn ich das ganze einfach mal... nicht weiterleite wenn Process = GetCurrentProcess? :shock: |
:shock: Wie meinen? Wenn ich die Server-App kill, wird der Code ausgeführt, mit dem ich TermianteProcess ersetzt habe. Nach dem Killen wird offensichtlich die Hook-Dll ebenfalls entladen und danach passiert nichts weiter. Wenn man einen bestimmten Prozess rausfiltert wird halt nur dann der Code abgehandelt, wenn das entsprechende Fenster gekillt wird. Ansonsten wird die alte TerminateProcess aufgerufen. Oder hab ich was übersehen? *verunsichert nach Denkfehlern such*
raziel
Anonymous - Fr 09.07.04 20:12
:?:
| raziel hat folgendes geschrieben: |
| *verunsichert nach Denkfehlern such* |
*das selbe tu*
Annahme: Ich hooke TerminateProcess und ersetze es durch eine leere Dummy-Proc => Das "echte" TerminateProcess kann nicht mehr erreicht werden (zumindest nicht wenn die richtige Methode genommen wird)
Jetzt versucht der User einen Prozess zu killen. Passiert etwas?
raziel - Fr 09.07.04 20:16
Ach so! Also ich hab ne MessageBox mit dem ExitCode und "Letzer Aufschrei" aufblobben lassen. Danach wird die original TerminateProcess aufgerufen (-> Process gets killed). Das führt aber insofern zu einem Fehler, dass der gekillte Process mit ner AV abschmiert, wenn der TaskMan geschlossen wird, bevor die MessageBox geschlossen wurde, aber da muss man halt dann auf die MessageBox verzichten und "unsichtbaren" Code ausführen.
Ausserdem ersetze ich nicht die Funktion, sondern biege ein paar Zeiger um, die ich beim Unhooken wieder gradebieg... ;-)
raziel
Anonymous - Fr 09.07.04 20:20
Also irre ich mich jetzt oder wird nicht eigentlich in der Import/Export-Tabelle rumgepfuscht? (Das wäre dann ja ersetzen)
raziel - Fr 09.07.04 20:23
In der Import, aber das wird jetzt OT ;-) Und wenn ich ein "Backup" der ursprünglichen Zeiger mach, kann die Hook-Dll sie weiterhin aufrufen und sie hinterher restaurieren.
Aber wie gesagt, das wird jetzt zu OT...
Anonymous - Fr 09.07.04 20:27
Eins noch:
Stimmt, aber du biegst keinen Zeiger, sondern die entsprechende Tabelle um :mahn:
raziel - Fr 09.07.04 20:29
| obbschtkuche hat folgendes geschrieben: |
| Stimmt, aber du biegst keinen Zeiger, sondern die entsprechende Tabelle um :mahn: |
Nein, ich biege für jede importierte Funktion, die ich hooken will, in der Importtabelle jeden Zeiger einzeln um! :mahn:
raziel
Anonymous - Fr 09.07.04 20:31
Also ersetzt du sie doch? :P :roll:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!