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 Prozessbeendigung hooken (https://www.delphipraxis.net/69034-prozessbeendigung-hooken.html)

Mystic 9. Mai 2006 13:39


Prozessbeendigung hooken
 
Gibt es eine Funktion, die immer dann ausgeführt wird, wenn ein Prozess beendet wird? Unabhängig davon, ob der Prozess sauber beendet oder terminiert wird.

Laufi 10. Mai 2006 12:45

Re: Prozessbeendigung hooken
 
Hallo

Ein Event gibt es nicht aber du kannst mit WaitForMultipleObjects warten bis der Prozess beendet ist. Wenn du lust hast, kannst du dafür auch einen Treat machen, das ist dann fast so wie ein Event :cyclops:

Liebe Grüsse

Olli 10. Mai 2006 17:07

Re: Prozessbeendigung hooken
 
Für Laufi's Variante brauchst du erstmal das Prozeßhandle mit korrekten Zugriffsrechten. Danach kannst du tatsächlich dieses Handle an WaitForSingleObject oder (zB s.o.) eine andere Wait-Funktion übergeben und auf die Beendigung warten.

Allerdings gibt es keine Möglichkeit dies für beliebige Prozesse (deren Handle du dann z.B. nicht hast) zu machen. Es gibt allerdings im Kernelmode eine Variante, die ich bei Interesse gern näher beschreibe (ab Windows 2000).

Mystic 10. Mai 2006 22:48

Re: Prozessbeendigung hooken
 
OK, danke. Das Handle zu kriegen ist kein Problem. Allerdings müsste ich über die Beendigung benachrichtigt werden und nicht darauf warten (oder soll ich für jeden Zielprozess einen Thread öffnen? :?).

Laufi 10. Mai 2006 23:33

Re: Prozessbeendigung hooken
 
Hallo

Nein ein Tread reicht wenn du WaitForMultipleObjects nimmst... Dort kannst Du alle Prozesshandles übergeben und wartest bis ein Prozess beendet ist dann kannst du einen schönen event auslösen und mit demselben Tread weiterwarten bis der nächste Prozess beendet ist und so weiter... Du kannst also das in einer Schleife machen! :firejump:

Liebe Grüsse

Olli 11. Mai 2006 11:44

Re: Prozessbeendigung hooken
 
Genau, mache es wie Laufi sagt.

In deinem Thread kannst du dann entweder ein Event auslösen oder z.B. eine Fensternachricht an deinen Hauptthread posten (MSDN-Library durchsuchenPostMessage) und dort gleich die PID oder welches (numerische!) Attribut auch immer direkt an den Hauptthread weitergeben. So bist du threadsafe ohne viele Probleme.

Robert Marquardt 11. Mai 2006 11:49

Re: Prozessbeendigung hooken
 
Ein WH_SHELL Hook eignet sich zumindest um sich korrekt beendigende Programme zu erfassen. Ob es auch fuer abgeschossene Programme geht weiss ich nicht.

Olli 11. Mai 2006 11:58

Re: Prozessbeendigung hooken
 
Ich glaube, daß es zumindest auf Win32-Prozesse (csrss) beschränkt ist (WH_SHELL).

Mystic 12. Mai 2006 21:51

Re: Prozessbeendigung hooken
 
Ich glaube, ich kehre zum Polling zurück... diese Methode bereit zu viele Probleme. :(

Olli 12. Mai 2006 23:30

Re: Prozessbeendigung hooken
 
Wenn es ab Windows 2000 reicht, gibt es eine recht einfache Methode es in einem Treiber zu implementieren. Wenn du willst, kann ich mal übers Wochenende gucken, ob ich was zusammenhacken kann.


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