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
EWX_HYBRID_SHUTDOWN
0x00400000
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 .
EWX_LOGOFF
0
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.

EWX_POWEROFF
0x00000008
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.

EWX_REBOOT
0x00000002
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.

EWX_RESTARTAPPS
0x00000040
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.
EWX_SHUTDOWN
0x00000001
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
EWX_FORCE
0x00000004
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.
EWX_FORCEIFHUNG
0x00000010
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)

Confira também

AdjustTokenPrivileges

HandlerRoutine

Logoff

SetProcessShutdownParameters

Desligar

Funções de desligamento do sistema