Согласно MSDN, невозможно определить, произошла ли перезагрузка или завершение работы с помощью сообщения WM_ENDSESSION.
Я нашел единственный способ сделать это, но это довольно уродливои работает только для Windows 2000 Server, но не для 2008 Server.
Причина, по которой я спрашиваю, заключается в том, что я в процессе переноса демона Linux на Windows в качестве системной службы.Этот демон действует по-разному при перезагрузке и отключении системы.
Я также использую python с pywin32 в проекте, если это как-то помогает ответить.