<p rant="on"> Well, to be honest, I don't think understand why will do programming any good. In addition, I don't honestly understand why this is migrated to SU in the first place (Other than SU being a rubbish bin for all irrelevant questions for many stackoverflow users</p>
O processo de desligamento do Windows pode ser visto como um processo de duas etapas:
- de "Conectado" a "Ninguém logado" (daqui em diante "Parte 1")
- de "Ninguém logado" para "Desligamento" (daqui em diante "Parte 2")
Na parte 1:
ExitWindowsEx(uFlags,dwReason)
é chamado - isso é realmente tratado por winlogon
. Ele envia WM_QUERYENDSESSION
para todos os aplicativos - e cada um dos aplicativos deve executar os procedimentos necessários antes do desligamento e retornar true
. Em seguida, ele recebe WM_ENDSESSION
e é finalizado. Isso está relacionado a todo o processo na sessão 1 (a chamada "sessão interativa")
Então:
- o perfil do usuário é atualizado e descarregado
- a conexão de rede (incluindo conexões VPN, se houver) é encerrada
- Os processos COM são finalizados
Na parte 2:
A sessão não interativa (sessão 0) também teria seu aplicativo terminado de maneira semelhante (representando a conta de usuário do sistema local) e os serviços seriam encerrados.
Depois de tudo isso, o sistema seria desligado.