Perhaps I wasn't clear before, but that's how AutoEndTasks works.
The HangAppTimeout setting controls how long the process has to respond to QUERYENDSESSION. If the process does not respond at all within the timeout period, it is considered hung and killed.
The WaitToKill(App|Service)Timeout setting controls how long the process has to respond positively to QUERYENDSESSION once it has first responded negatively ... Windows repeats the query periodically until either the process responds positively or the timeout expires.
If AutoEndTasks is not set, these timeouts produces a warning message. If it is set, the processes are killed and no message is displayed.
The problem is what to do with those pesky processes that refuse QUERYENDSESSION ... they obviously aren't hung completely because they can respond to the inquiry, but regardless they aren't cooperating and may never do so if they are multithreaded or overlapped and some other part of them is stuck. Do you then wait forever? I've seen servers exhaust stand-by power and crash waiting for uncooperative processes to halt.
And WRT the file system being messed up ... that is not very likely to happen unless something is actively writing when the reset or power down occurs. NTFS is pretty durable if/when journaling is enabled - I used to write industrial HRT embedded and SRT kiosk-style applications on NT ... even under pretty extreme factory floor conditions (temperature, flaky power, whimsical use of red button, etc.), I hardly ever saw file corruption in any of the systems I worked on.
George