Zwischen der
API-Funktion TerminateProcess und dem Code, der beim Herunterfahren/Neustart von Windows ausgeführt wird gibt es sicher einen Unterschied.
Folgende Überlegungen sind rein spekulativ aber die Logik sagt mir, dass es so ablaufen muss
Wenn Windows heruntergefahren wird, dann bekommen die Anwendungen eine freundliche WM_CLOSE Message.
Sollte eine Anwendung darauf nicht innerhalb einer best. Zeit reagieren, dann kommt wohl das härtere TerminateProcess zum Zuge.
Sollte TerminateProcess nichts bewirken dann hat Windows sicher noch einen "Emergency" Mechanismus
in der Hinterhand.
Wenn Windows sowieso runtergefahren wird, dann ist es doch egal ob die reservierten Resourcen (Speicher, File-Handles,...) einer Anwendung wirklich freigegeben werden.
Windows braucht dann nur alle Threads anhalten und alle Handles gewaltsam schliesen und so tun als ob der Prozess gekillt wäre.
Hätte Windows diesen Notmechanismus nicht, gäbe es öfters mal Blockaden beim Herunterfahren
wie man das z.B. noch von Windows 95/98/ME kennt.
Und dann gibt es auch noch die undokumentierte
API-Funktion
NtTerminateProcess bzw. ZwTerminateProcess, die möglicherweise härter als TerminateProcess agieren.