Cuando el sistema va a ser reiniciado u apagado, este envía un mensaje WM_QUERYENDSESSION a cada aplicación. Las aplicaciones que devuelvan TRUE a dicho mensaje, reciben WM_ENDSESSION.
Citar
lParam
This parameter can be one or more of the following values. If this parameter is 0, the system is shutting down or restarting (it is not possible to determine which event is occurring).
Y con eso te debería bastar para lo que quieres hacer. Otra opción seria emplear hooks pero no creo que sea lo mas adecuado en este caso.
Saludos
En línea
An expert is a man who has made all the mistakes which can be made, in a very narrow field.