Função ExitWindowsEx (winuser.h)
Faz logoff do usuário interativo, desliga o sistema ou desliga e reinicia o sistema. Ele envia a mensagem WM_QUERYENDSESSION para todos os aplicativos para determinar se eles podem ser encerrados.
Sintaxe
BOOL ExitWindowsEx(
[in] UINT uFlags,
[in] DWORD dwReason
);
Parâmetros
[in] uFlags
O tipo de desligamento. Esse parâmetro deve incluir um dos valores a seguir.
Valor | Significado |
---|---|
|
A partir do Windows 8: Você pode preparar o sistema para uma inicialização mais rápida combinando o sinalizador EWX_HYBRID_SHUTDOWN com o sinalizador EWX_SHUTDOWN . |
|
Desliga todos os processos em execução na sessão de logon do processo que chamou a função ExitWindowsEx . Em seguida, ele faz logoff do usuário.
Esse sinalizador só pode ser usado por processos em execução na sessão de logon de um usuário interativo. |
|
Desliga o sistema e desativa a energia. O sistema deve dar suporte ao recurso de desligar.
O processo de chamada deve ter o privilégio SE_SHUTDOWN_NAME. Para obter mais informações, consulte a seção Comentários a seguir. |
|
Desliga o sistema e reinicia o sistema.
O processo de chamada deve ter o privilégio SE_SHUTDOWN_NAME. Para obter mais informações, consulte a seção Comentários a seguir. |
|
Desliga o sistema e o reinicia, bem como todos os aplicativos que foram registrados para reinicialização usando a função RegisterApplicationRestart . Esses aplicativos recebem a mensagem WM_QUERYENDSESSION com lParam definido como o valor ENDSESSION_CLOSEAPP. Para obter mais informações, consulte Diretrizes para aplicativos. |
|
Desliga o sistema a um ponto em que é seguro desligar a energia. Todos os buffers de arquivo foram liberados para o disco e todos os processos em execução foram interrompidos.
O processo de chamada deve ter o privilégio SE_SHUTDOWN_NAME. Para obter mais informações, consulte a seção Comentários a seguir. Especificar esse sinalizador não desativará a energia mesmo que o sistema dê suporte ao recurso de desligar. Você deve especificar EWX_POWEROFF para fazer isso. Windows XP com SP1: Se o sistema der suporte ao recurso de desligar, especificar esse sinalizador desativa a energia. |
Opcionalmente, esse parâmetro pode incluir um dos valores a seguir.
Valor | Significado |
---|---|
|
Esse sinalizador não terá efeito se os serviços de terminal estiverem habilitados. Caso contrário, o sistema não enviará a mensagem de WM_QUERYENDSESSION . Isso pode fazer com que os aplicativos percam dados. Portanto, você só deve usar esse sinalizador em uma emergência. |
|
Força os processos a serem encerrados se eles não responderem à mensagem WM_QUERYENDSESSION ou WM_ENDSESSION dentro do intervalo de tempo limite. Para obter mais informações, consulte Comentários. |
[in] dwReason
O motivo para iniciar o desligamento. Esse parâmetro deve ser um dos códigos de motivo de desligamento do sistema.
Se esse parâmetro for zero, o código SHTDN_REASON_FLAG_PLANNED motivo não será definido e, portanto, a ação padrão será um desligamento indefinido registrado como "Nenhum título por esse motivo pode ser encontrado". Por padrão, ele também é um desligamento não planejado. Dependendo de como o sistema está configurado, um desligamento não planejado dispara a criação de um arquivo que contém as informações de estado do sistema, o que pode atrasar o desligamento. Portanto, não use zero para esse parâmetro.
Valor retornado
Se a função for bem-sucedida, o valor retornado será diferente de zero. Como a função é executada de forma assíncrona, um valor retornado diferente de zero indica que o desligamento foi iniciado. Ele não indica se o desligamento terá êxito. É possível que o sistema, o usuário ou outro aplicativo anule o desligamento.
Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.
Comentários
A função ExitWindowsEx retorna assim que inicia o processo de desligamento. Em seguida, o desligamento ou logoff continua de forma assíncrona. A função foi projetada para interromper todos os processos na sessão de logon do chamador. Portanto, se você não for o usuário interativo, a função poderá ter êxito sem realmente desligar o computador. Se você não for o usuário interativo, use a função InitiateSystemShutdown ou InitiateSystemShutdownEx .
Um valor retornado diferente de zero não significa que o logoff foi ou será bem-sucedido. O desligamento é um processo assíncrono e pode ocorrer muito depois que a chamada à API tiver retornado ou não. Mesmo que o valor do tempo limite seja zero, o desligamento ainda poderá ser anulado por aplicativos, serviços ou até mesmo pelo sistema. O valor retornado diferente de zero indica que a validação dos direitos e parâmetros foi bem-sucedida e que o sistema aceitou a solicitação de desligamento.
Quando essa função é chamada, o chamador deve especificar se os aplicativos com alterações não salvas devem ou não ser fechados à força. Se o chamador optar por não forçar o fechamento desses aplicativos e um aplicativo com alterações não salvas estiver em execução na sessão do console, o desligamento permanecerá em andamento até que o usuário conectado à sessão do console anule o desligamento, salve as alterações, feche o aplicativo ou force o fechamento do aplicativo. Durante esse período, o desligamento pode não ser anulado, exceto pelo usuário do console, e outro desligamento pode não ser iniciado.
Chamar essa função com o valor do parâmetro uFlags definido como EWX_FORCE evita essa situação. Lembre-se de que fazer isso pode resultar em perda de dados.
Para definir uma prioridade de desligamento para um aplicativo em relação a outros aplicativos no sistema, use a função SetProcessShutdownParameters .
Durante uma operação de desligamento ou de logoff, os aplicativos em execução têm um tempo específico para responder à solicitação de desligamento. Se esse tempo expirar antes que todos os aplicativos sejam interrompidos, o sistema exibirá uma interface do usuário que permite que o usuário desligue o sistema à força ou cancele a solicitação de desligamento. Se o valor EWX_FORCE for especificado, o sistema forçará a interrupção dos aplicativos em execução quando o tempo expirar.
Se o valor EWX_FORCEIFHUNG for especificado, o sistema forçará os aplicativos suspensos a fechar e não exibirá a caixa de diálogo.
Os processos de console recebem uma mensagem de notificação separada, CTRL_SHUTDOWN_EVENT ou CTRL_LOGOFF_EVENT, conforme a situação garante. Um processo de console roteia essas mensagens para sua função HandlerRoutine . ExitWindowsEx envia essas mensagens de notificação de forma assíncrona; Portanto, um aplicativo não pode assumir que as mensagens de notificação do console foram tratadas quando uma chamada para ExitWindowsEx retorna.
Para desligar ou reiniciar o sistema, o processo de chamada deve usar a função AdjustTokenPrivileges para habilitar o privilégio SE_SHUTDOWN_NAME. Para obter mais informações, confira Executar com privilégios especiais.
Exemplos
Para obter um exemplo, consulte Como desligar o sistema.
Requisitos
Cliente mínimo com suporte | Windows XP [aplicativos da área de trabalho | aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | winuser.h (inclua Windows.h) |
Biblioteca | User32.lib |
DLL | User32.dll |
Conjunto de APIs | ext-ms-win-ntuser-misc-l1-1-0 (introduzido no Windows 8) |