Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Aufrufer von ExitWindowsEx herausfinden (https://www.delphipraxis.net/167193-aufrufer-von-exitwindowsex-herausfinden.html)

Christian Seehase 16. Mär 2012 23:45

Aufrufer von ExitWindowsEx herausfinden
 
Moin Zusammen,

ich versuche herauszufinden, welcher Prozess die Funktion ExitWindowsEx aufgerufen hat.
Sie jemand eine Chance, oder hat vielleicht sogar eine Idee, wie ich das umsetzen kann?

lbccaleb 16. Mär 2012 23:57

AW: Aufrufer von ExitWindowsEx herausfinden
 
Du könntest OllyDBG benutzen, aber da ich denke du brauchst es in deinem eigenen Programm, könntest du dir vllt. ein wenig bei der Cheat Engine(mit Source) abschauen. Ich glaube, da gabs unteranderem die möglichkeit, Break Points zu setzen. Benutze das Programm aber nicht, also bin ich mir nicht zu 100% sicher...

Christian Seehase 17. Mär 2012 00:21

AW: Aufrufer von ExitWindowsEx herausfinden
 
Moin Martin,

danke, dass schau ich mir gleich mal an. :)

Mein Problem ist halt, dass ich es im laufenden Betrieb automatisch ermitteln muss.

[EDIT sagt]
Schade, der Sourcecode steht, zumindest zur Zeit nicht zur Verfügung
[/EDIT sagt]

hathor 17. Mär 2012 00:47

AW: Aufrufer von ExitWindowsEx herausfinden
 
WM_QUERYENDSESSION kommt immer von CSRSS.
http://en.wikipedia.org/wiki/Client/...time_Subsystem
.
http://books.google.de/books?id=YDAC...page&q&f=false

Mehr Infos:
Seite 286
csit.udc.edu/~byu/UDC3529315/WindowsInternals-4e.pdf

himitsu 17. Mär 2012 01:24

AW: Aufrufer von ExitWindowsEx herausfinden
 
Nur das Dieses das Handle des Empfängers (für den diese Message bestimmt ist, als an Welches Diese gesendet wurde) und nicht das Handle des Senders ist.

Der Sender ist vermutlich Windows, welches diese Message im System verteilt, aber vom Auslöser sieht man da wohl auch nichts mehr.

Eventuell wird irgendwo in der Message gespeichert von welchem Thread sie ausgelöst wurde und wenn Windows Diese direkt über den selben Thread im System verteils und das nicht erst via Message in sich selbst verteilt und Sie somit wiederum erst über eine MessageLoop (im verarbeitenden Thread) rumreicht.

[edit] hmmm, edit?
ging um das HWND im Message-Window-Proc
da geb ich mir so Mühe den Knoten aus meinen Gedanken zu bekommen und dann sieht die RedBox nichtmal den Alnass mich zu warnen :cry:

Zitat:

Mein Problem ist halt, dass ich es im laufenden Betrieb automatisch ermitteln muss.
Du müßtest ja nur Einmal rausbekommen, ob und man es nachträgich rausbekommt.
Ansonsten bleibt wohl nur ein globaler WinAPI-Hook dieser Shoutdown-Funktionen, aber wenn es eventuell durch einen Treiber/Interrupt (drücken der Ausschalttaste) ausgelöst wird ... :gruebel:

Christian Seehase 17. Mär 2012 02:34

AW: Aufrufer von ExitWindowsEx herausfinden
 
Moin Zusammen,

@Hathor:
Danke schon mal für den Tip mit WM_QUERYENDSESSION.
Damit könnte ich schon mal unterbinden, dass der Rechner ohne Rückfrage herunterfährt, da EWX_FORCE offensichtlich nicht verwendet wird.

@Himitsu:
Das der Ausschalter gedrückt wird kann ich ausschliessen.
Es geht darum herauszufinden welcher Prozess (besser welches Programm) einen Rechner ohne Vorwarnung herunterfährt.
Ein entsprechender Eventlog-Eintrag zeigt, dass dies über ExitWindowsEx initiiert wird.

himitsu 17. Mär 2012 05:14

AW: Aufrufer von ExitWindowsEx herausfinden
 
Es sollten sich hier auch schon einige Einträge zu WM_QUERYENDSESSION finden lassen.
In Win7 scheint es (wenn ich mich recht erinnere) so, als daß Windows nicht unbedingt darauf hört.

Der "einfachste Weg, wäre wohl der globale WinAPI-Hook, aber alle Prozesse lassen sich nicht hooken. (die lieben Recht)

MSDN-Library durchsuchenShutdownBlockReasonCreate klingt auch recht net, aber ob ExitWindowsEx drauf reagiert ... k.A.

hathor 17. Mär 2012 13:08

AW: Aufrufer von ExitWindowsEx herausfinden
 
Anmerkung:
Console applications can use the SetConsoleCtrlHandler function to receive shutdown notification.

Service applications can use the RegisterServiceCtrlHandlerEx function to receive shutdown notifications in a handler routine.
.
Ausserdem:
Certain types of applications will no longer be allowed to block shutdown.

At shutdown, Windows Vista will check whether each running application is not responding (an application is defined as not responding if it has not responded to any of its window messages in the last 5 seconds), and, if so, automatically terminate it.

Windows Vista will also not allow console applications or applications that have no visible top-level windows to block shutdown. In most cases, such applications are less important to users at shutdown than applications that do have visible top-level windows. If an application without a visible top-level window blocks shutdown by vetoing WM_QUERYENDSESSION, or takes over 5 seconds to respond to WM_QUERYENDSESSION or WM_ENDSESSION, Windows will automatically terminate it.

However, if an application with no visible top-level windows uses the new API to proactively indicate that it needs to block shutdown, Windows Vista will not automatically terminate it, and will instead treat it like an application that does have a visible top-level window.

Was für VISTA gilt ist auch für WIN 7 relevant.

Christian Seehase 17. Mär 2012 14:52

AW: Aufrufer von ExitWindowsEx herausfinden
 
Moin Zusammen,

wie ich euren Beiträgen entnehme, habe ich vergessen anzugeben, dass es sich um XP handelt. :oops:


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