Función ExitWindowsEx (winuser.h)

Cierra la sesión del usuario interactivo, cierra el sistema o cierra y reinicia el sistema. Envía el mensaje WM_QUERYENDSESSION a todas las aplicaciones para determinar si se pueden finalizar.

Sintaxis

BOOL ExitWindowsEx(
  [in] UINT  uFlags,
  [in] DWORD dwReason
);

Parámetros

[in] uFlags

Tipo de apagado. Este parámetro debe incluir uno de los valores siguientes.

Valor Significado
EWX_HYBRID_SHUTDOWN
0x00400000
A partir de Windows 8: Puede preparar el sistema para un inicio más rápido combinando la marca EWX_HYBRID_SHUTDOWN con la marca EWX_SHUTDOWN .
EWX_LOGOFF
0
Cierra todos los procesos que se ejecutan en la sesión de inicio de sesión del proceso que llamó a la función ExitWindowsEx . A continuación, cierra la sesión del usuario.

Esta marca solo se puede usar mediante procesos que se ejecutan en la sesión de inicio de sesión de un usuario interactivo.

EWX_POWEROFF
0x00000008
Apaga el sistema y apaga la alimentación. El sistema debe admitir la característica de apagado.

El proceso de llamada debe tener el privilegio SE_SHUTDOWN_NAME. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

EWX_REBOOT
0x00000002
Apaga el sistema y, a continuación, reinicia el sistema.

El proceso de llamada debe tener el privilegio SE_SHUTDOWN_NAME. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

EWX_RESTARTAPPS
0x00000040
Apaga el sistema y, a continuación, lo reinicia, así como las aplicaciones que se han registrado para reiniciarse mediante la función RegisterApplicationRestart . Esta aplicación recibe el mensaje de WM_QUERYENDSESSION con lParam establecido en el valor de ENDSESSION_CLOSEAPP. Para obtener más información, vea Directrices para aplicaciones.
EWX_SHUTDOWN
0x00000001
Apaga el sistema a un punto en el que es seguro apagar la alimentación. Todos los búferes de archivos se han vaciado en el disco y todos los procesos en ejecución se han detenido.

El proceso de llamada debe tener el privilegio SE_SHUTDOWN_NAME. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

Especificar esta marca no apagará la alimentación aunque el sistema admita la característica de apagado. Debe especificar EWX_POWEROFF para hacerlo. Windows XP con SP1: Si el sistema admite la característica de apagado, al especificar esta marca se apaga la alimentación.

 

Este parámetro puede incluir opcionalmente uno de los valores siguientes.

Valor Significado
EWX_FORCE
0x00000004
Esta marca no tiene ningún efecto si los servicios de terminal están habilitados. De lo contrario, el sistema no envía el mensaje WM_QUERYENDSESSION . Esto puede hacer que las aplicaciones pierdan datos. Por lo tanto, solo debe usar esta marca en una emergencia.
EWX_FORCEIFHUNG
0x00000010
Fuerza a los procesos a finalizar si no responden al WM_QUERYENDSESSION o WM_ENDSESSION mensaje dentro del intervalo de tiempo de espera. Para obtener más información, vea la sección Notas.

[in] dwReason

Motivo para iniciar el apagado. Este parámetro debe ser uno de los códigos de motivo del apagado del sistema.

Si este parámetro es cero, no se establecerá el código de SHTDN_REASON_FLAG_PLANNED motivo y, por lo tanto, la acción predeterminada es un cierre indefinido que se registra como "No se puede encontrar ningún título por este motivo". De forma predeterminada, también es un apagado no planeado. Dependiendo de cómo se configure el sistema, un apagado no planeado desencadena la creación de un archivo que contiene la información de estado del sistema, que puede retrasar el apagado. Por lo tanto, no use cero para este parámetro.

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es distinto de cero. Dado que la función se ejecuta de forma asincrónica, un valor devuelto distinto de cero indica que se ha iniciado el apagado. No indica si el apagado se realizará correctamente. Es posible que el sistema, el usuario u otra aplicación anule el apagado.

Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Comentarios

La función ExitWindowsEx devuelve tan pronto como haya iniciado el proceso de apagado. A continuación, el cierre o el cierre continúan de forma asincrónica. La función está diseñada para detener todos los procesos en la sesión de inicio de sesión del autor de la llamada. Por lo tanto, si no es el usuario interactivo, la función puede realizarse correctamente sin apagar realmente el equipo. Si no es el usuario interactivo, use la función InitiateSystemShutdown o InitiateSystemShutdownEx .

Un valor devuelto distinto de cero no significa que el logoff fuera o se realizara correctamente. El apagado es un proceso asincrónico y puede producirse mucho tiempo después de que se haya devuelto la llamada API, o no en absoluto. Incluso si el valor de tiempo de espera es cero, las aplicaciones, los servicios o incluso el sistema pueden anular el apagado. El valor devuelto distinto de cero indica que la validación de los derechos y parámetros se realizó correctamente y que el sistema aceptó la solicitud de cierre.

Cuando se llama a esta función, el autor de la llamada debe especificar si las aplicaciones con cambios no guardados deben cerrarse forzosamente. Si el autor de la llamada decide no obligar a estas aplicaciones a cerrarse y una aplicación con cambios no guardados se ejecuta en la sesión de consola, el apagado permanecerá en curso hasta que el usuario haya iniciado sesión en la sesión de consola anula el apagado, guarda los cambios, cierra la aplicación o obliga a la aplicación a cerrarse. Durante este período, es posible que el cierre no se anule, excepto por el usuario de la consola, y es posible que no se inicie otro apagado.

Llamar a esta función con el valor del parámetro uFlags establecido en EWX_FORCE evita esta situación. Recuerde que hacerlo puede dar lugar a la pérdida de datos.

Para establecer una prioridad de apagado para una aplicación en relación con otras aplicaciones del sistema, use la función SetProcessShutdownParameters .

Durante una operación de apagado o cierre de sesión, se permite que las aplicaciones en ejecución respondan a una cantidad específica de tiempo para responder a la solicitud de apagado. Si esta vez expira antes de que todas las aplicaciones se hayan detenido, el sistema muestra una interfaz de usuario que permite al usuario apagar forzosamente el sistema o cancelar la solicitud de apagado. Si se especifica el valor EWX_FORCE, el sistema obliga a que las aplicaciones en ejecución se detengan cuando expire el tiempo.

Si se especifica el valor EWX_FORCEIFHUNG, el sistema obliga a las aplicaciones bloqueadas a cerrarse y no muestra el cuadro de diálogo.

Los procesos de consola reciben un mensaje de notificación independiente, CTRL_SHUTDOWN_EVENT o CTRL_LOGOFF_EVENT, ya que la situación garantiza. Un proceso de consola enruta estos mensajes a su función HandlerRoutine . ExitWindowsEx envía estos mensajes de notificación de forma asincrónica; por lo tanto, una aplicación no puede suponer que los mensajes de notificación de la consola se han controlado cuando se devuelve una llamada a ExitWindowsEx .

Para apagar o reiniciar el sistema, el proceso de llamada debe usar la función AdjustTokenPrivileges para habilitar el privilegio SE_SHUTDOWN_NAME. Para más información, consulte Ejecución con privilegios especiales.

Ejemplos

Para obtener un ejemplo, vea Cómo apagar el sistema.

Requisitos

   
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado winuser.h (incluir Windows.h)
Library User32.lib
Archivo DLL User32.dll
Conjunto de API ext-ms-win-ntuser-misc-l1-1-0 (introducido en Windows 8)

Consulte también

AdjustTokenPrivileges

HandlerRoutine

Cerrar sesión

SetProcessShutdownParameters

Cerrando

Funciones de apagado del sistema