A: 

Close all windows (since XP) implementation is kind of hacky. In your FormClosing implementation check if the form is disabled because a TaskDialog or any other prompt is shown with the form being the owner of the prompt.

While you're at it check how your closing scheme performs upon WM_QUERYENDSESSION i.e. user logs off with changes pending.

wqw
I have proper checks that should a Shutdown or Task Manager force quit occur that it skips these checks for changes and just discards them. The Close-all-windows command appears as a standard UserClosing cause, just as if they clicked the red X. I cannot check for open TaskDialogs as they have not appeared yet. The first time I attempt to show one, it seems to yield to the other form closing events before actually appearing itself.
Yadyn
Check your form for WS_DISABLED before showing the save changes prompt. Start a Notepad and type anything then try to log off and you get a confirmation.
wqw