Das trifft hier ja nicht zu, denn das Speichern soll ja beim Beenden passieren.
Allerdings steht in dem Link die Vorgehensweise beim Shutdown erklärt.
Wenn die Anwendung prinzipiell mit dem Beenden der Session einverstanden ist, dann braucht diese auf
WM_QUERYENDSESSION gar nicht reagieren, sondern nur auf
WM_ENDSESSION und auch nur dann, wenn da
wParam
TRUE
ist.
Dort hat die Anwendung dann idR unbegrenzt Zeit (siehe Link von hathor) alle Aktionen zu Beenden.
Allerdings wird ein Dialog eingeblendet und der Anwender kann immer das Herunterfahren erzwingen und dann wird die Anwendung auch hart über den Jordan geschickt. Dagegen kann man nichts machen, sondern nur im Protokoll vermerken.
Interessant ist auch der
lParam
Wert (
TWMEndSession.Unused ), denn darüber bekommt man raus unter welchen Bedingungen das passiert.
ENDSESSION_CRITICAL
ist dabei sehr interessant, denn dann hat man nur sehr wenig Zeit (siehe Link von hathor).
Wenn es extrem kritisch ist, dann sollte man diese sensiblen Daten periodisch immer speichern (Thread) - evtl. auch nicht an den original Stellen - um diesen Status beim nächsten Start wiederherstellen zu können.
Das ist ja auch gängige/vorgeschriebene Praxis bei den Anwendungen für Mobile Devices.