Partager via


Fonction ExitWindowsEx (winuser.h)

Déconnecte l’utilisateur interactif, arrête le système ou arrête et redémarre le système. Il envoie le message WM_QUERYENDSESSION à toutes les applications pour déterminer si elles peuvent être arrêtées.

Syntaxe

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

Paramètres

[in] uFlags

Type d’arrêt. Ce paramètre doit inclure l’une des valeurs suivantes.

Valeur Signification
EWX_HYBRID_SHUTDOWN
0x00400000
À compter de Windows 8 : Vous pouvez préparer le système pour un démarrage plus rapide en combinant l’indicateur EWX_HYBRID_SHUTDOWN avec l’indicateur EWX_SHUTDOWN .
EWX_LOGOFF
0
Arrête tous les processus en cours d’exécution dans la session d’ouverture de session du processus qui a appelé la fonction ExitWindowsEx . Ensuite, il désactive l’utilisateur.

Cet indicateur ne peut être utilisé que par les processus en cours d’exécution dans la session d’ouverture de session d’un utilisateur interactif.

EWX_POWEROFF
0x00000008
Arrête le système et éteint l’alimentation. Le système doit prendre en charge la fonctionnalité de mise hors tension.

Le processus appelant doit avoir le privilège SE_SHUTDOWN_NAME. Pour plus d'informations, consultez la section Notes qui suit.

EWX_REBOOT
0x00000002
Arrête le système, puis redémarre le système.

Le processus appelant doit avoir le privilège SE_SHUTDOWN_NAME. Pour plus d'informations, consultez la section Notes qui suit.

EWX_RESTARTAPPS
0x00000040
Arrête le système, puis le redémarre, ainsi que toutes les applications qui ont été inscrites pour redémarrer à l’aide de la fonction RegisterApplicationRestart . Ces applications reçoivent le message WM_QUERYENDSESSION avec lParam défini sur la valeur ENDSESSION_CLOSEAPP. Pour plus d’informations, consultez Recommandations pour les applications.
EWX_SHUTDOWN
0x00000001
Arrête le système à un point où il est sûr de désactiver l’alimentation. Tous les tampons de fichiers ont été vidés sur le disque et tous les processus en cours d’exécution ont été arrêtés.

Le processus appelant doit avoir le privilège SE_SHUTDOWN_NAME. Pour plus d'informations, consultez la section Notes qui suit.

La spécification de cet indicateur ne désactive pas l’alimentation même si le système prend en charge la fonctionnalité de mise hors tension. Vous devez spécifier EWX_POWEROFF pour ce faire. Windows XP avec SP1 : Si le système prend en charge la fonctionnalité de mise hors tension, la spécification de cet indicateur désactive l’alimentation.

 

Ce paramètre peut éventuellement inclure l’une des valeurs suivantes.

Valeur Signification
EWX_FORCE
0x00000004
Cet indicateur n’a aucun effet si les services Terminal Server sont activés. Sinon, le système n’envoie pas le message WM_QUERYENDSESSION . Cela peut entraîner la perte de données des applications. Par conséquent, vous devez utiliser cet indicateur uniquement en cas d’urgence.
EWX_FORCEIFHUNG
0x00000010
Force les processus à se terminer s’ils ne répondent pas au message WM_QUERYENDSESSION ou WM_ENDSESSION dans l’intervalle de délai d’expiration. Pour plus d'informations, consultez la section Notes.

[in] dwReason

Raison du lancement de l’arrêt. Ce paramètre doit être l’un des codes de raison d’arrêt du système.

Si ce paramètre est égal à zéro, le code de raison SHTDN_REASON_FLAG_PLANNED n’est pas défini et, par conséquent, l’action par défaut est un arrêt non défini enregistré sous la forme « Aucun titre pour cette raison n’a pu être trouvé ». Par défaut, il s’agit également d’un arrêt non planifié. Selon la façon dont le système est configuré, un arrêt non planifié déclenche la création d’un fichier qui contient les informations d’état du système, ce qui peut retarder l’arrêt. Par conséquent, n’utilisez pas zéro pour ce paramètre.

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro. Étant donné que la fonction s’exécute de manière asynchrone, une valeur de retour différente de zéro indique que l’arrêt a été lancé. Il n’indique pas si l’arrêt réussit. Il est possible que le système, l’utilisateur ou une autre application abandonne l’arrêt.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Remarques

La fonction ExitWindowsEx retourne dès qu’elle a lancé le processus d’arrêt. L’arrêt ou la déconnexion se poursuit ensuite de manière asynchrone. La fonction est conçue pour arrêter tous les processus dans la session d’ouverture de session de l’appelant. Par conséquent, si vous n’êtes pas l’utilisateur interactif, la fonction peut réussir sans arrêter l’ordinateur. Si vous n’êtes pas l’utilisateur interactif, utilisez la fonction InitiateSystemShutdown ou InitiateSystemShutdownEx .

Une valeur de retour autre que zéro ne signifie pas que la fermeture de session a été ou sera réussie. L’arrêt est un processus asynchrone, qui peut se produire longtemps après le retour de l’appel d’API, ou pas du tout. Même si la valeur du délai d’expiration est égale à zéro, l’arrêt peut toujours être abandonné par les applications, les services ou même le système. La valeur de retour autre que zéro indique que la validation des droits et des paramètres a réussi et que le système a accepté la demande d’arrêt.

Lorsque cette fonction est appelée, l’appelant doit spécifier si les applications avec des modifications non enregistrées doivent être fermées de force. Si l’appelant choisit de ne pas forcer ces applications à se fermer et qu’une application avec des modifications non enregistrées s’exécute sur la session de console, l’arrêt reste en cours d’exécution jusqu’à ce que l’utilisateur connecté à la session de console abandonne l’arrêt, enregistre les modifications, ferme l’application ou force l’application à se fermer. Pendant cette période, l’arrêt ne peut pas être abandonné, sauf par l’utilisateur de la console, et un autre arrêt peut ne pas être lancé.

L’appel de cette fonction avec la valeur du paramètre uFlags définie sur EWX_FORCE évite cette situation. N’oubliez pas que cela peut entraîner la perte de données.

Pour définir une priorité d’arrêt pour une application par rapport à d’autres applications dans le système, utilisez la fonction SetProcessShutdownParameters .

Pendant une opération d’arrêt ou de déconnexion, les applications en cours d’exécution ont un délai spécifique pour répondre à la demande d’arrêt. Si ce délai expire avant l’arrêt de toutes les applications, le système affiche une interface utilisateur qui permet à l’utilisateur d’arrêter de force le système ou d’annuler la demande d’arrêt. Si la valeur EWX_FORCE est spécifiée, le système force les applications en cours d’exécution à s’arrêter à l’expiration de l’heure.

Si la valeur EWX_FORCEIFHUNG est spécifiée, le système force les applications bloquées à se fermer et n’affiche pas la boîte de dialogue.

Les processus de console reçoivent un message de notification distinct, CTRL_SHUTDOWN_EVENT ou CTRL_LOGOFF_EVENT, selon la situation. Un processus console achemine ces messages vers sa fonction HandlerRoutine . ExitWindowsEx envoie ces messages de notification de manière asynchrone ; par conséquent, une application ne peut pas supposer que les messages de notification de console ont été gérés lorsqu’un appel à ExitWindowsEx est retourné.

Pour arrêter ou redémarrer le système, le processus appelant doit utiliser la fonction AdjustTokenPrivileges pour activer le privilège SE_SHUTDOWN_NAME. Pour plus d’informations, consultez Exécution avec des privilèges spéciaux.

Exemples

Pour obtenir un exemple, consultez Comment arrêter le système.

Configuration requise

   
Client minimal pris en charge Windows XP [applications de bureau | applications UWP]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête winuser.h (inclure Windows.h)
Bibliothèque User32.lib
DLL User32.dll
Ensemble d’API ext-ms-win-ntuser-misc-l1-1-0 (introduit dans Windows 8)

Voir aussi

AjusterTokenPrivileges

HandlerRoutine

Déconnexion

SetProcessShutdownParameters

Fermeture

Fonctions d’arrêt du système