CreateProcess, WaitForSingleObject, GetExitCodeProcess, a ubicie procesu

0

Witajcie:)

Czy jest możliwość rozpoznania, czy uruchomiony przez nasz program proces przy użyciu CreateProcess zakończył się normalnie, czy został ubity np. Menedżerem zadań?
W necie nie znalazłem takiego przykładu. Kombinowałem też z odpaleniem procesu przez użycie CreateJobObject, lecz nie udało się wykryć sposobu zakończenia procesu.
Interesuje mnie przypadek uruchomionego "obcego" procesu, który nie pozostawia śladów swojej pracy jeśli się go ubije (np. tymczasowe pliki lub wpisy w rejestrach), po których można by poznać, że proces nie zakończył się normalnie.

1

Nie wiem czy to się sprawdzi, ale zawsze można spróbować globalny hook na TerminateProcess, PostQuitMessage czy EndDialog lub SendMessageX* z WM_QUIT lub WM_DESTROY. Info: * - gdzie X to najczęściej będzie oczywiście A lub W, ale to trzeba by sprawdzić na przykład API Monitorem czy innym tego typu softem. Dla przykładu takie hooki dołaczam wraz z exekami do tego posta. Niestety ta metoda ma taką wadę, że porządne antywirusy jak chocby KAV2010, a być może i wcześniejsze ostrzegają przed zakładaniem globalnego hooka przez te exeki aplikacji. Mniej porządne mogą od razu nastraszyć użytkownika, że uruchamia wirus lub ostrzeżenie zniechęci użytkownika do uruchomienia procesu. W takim przypadku trzeba kombinować, ale jak to mnie nie interesuje bo nie tworzę i nie chcę tworzyć malware. Można pewnie kombinować z pisaniem usługi i takie tam, ale po co. Jeśli nie masz złych zamiarów i przekonasz o tym użytkownika dołączając na przykład kod źródlowy do projektu w tak przejrzystym (według mnie) języku jakim jest (dla mnie i pewnie nie tylko dla mnie) Delphi to nie będzie problemów. Tyle ode mnie, bo pora iść spać, a coś więcej i może konkretniej może doradzą Tobie inni użytkownicy forum.

0

Dzięki olesio, przykładowe programy są bardzo przydatne :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1