Condividi tramite


Funzione ExitWindowsEx (winuser.h)

Disconnette l'utente interattivo, arresta il sistema o arresta e riavvia il sistema. Invia il messaggio di WM_QUERYENDSESSION a tutte le applicazioni per determinare se possono essere terminati.

Sintassi

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

Parametri

[in] uFlags

Tipo di arresto. Questo parametro deve includere uno dei valori seguenti.

Valore Significato
EWX_HYBRID_SHUTDOWN
0x00400000
A partire da Windows 8: È possibile preparare il sistema per un avvio più veloce combinando il flag di EWX_HYBRID_SHUTDOWN con il flag di EWX_SHUTDOWN .
EWX_LOGOFF
0
Arresta tutti i processi in esecuzione nella sessione di accesso del processo che ha chiamato la funzione ExitWindowsEx . Quindi registra l'utente disattivato.

Questo flag può essere usato solo dai processi in esecuzione in una sessione di accesso interattiva dell'utente.

EWX_POWEROFF
0x00000008
Arresta il sistema e disattiva la potenza. Il sistema deve supportare la funzionalità di disattivazione.

Il processo di chiamata deve avere il privilegio di SE_SHUTDOWN_NAME. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

EWX_REBOOT
0x00000002
Arresta il sistema e quindi riavvia il sistema.

Il processo di chiamata deve avere il privilegio di SE_SHUTDOWN_NAME. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

EWX_RESTARTAPPS
0x00000040
Arresta il sistema e quindi lo riavvia, nonché tutte le applicazioni registrate per il riavvio usando la funzione RegisterApplicationRestart . Queste applicazioni ricevono il messaggio di WM_QUERYENDSESSION con lParam impostato sul valore ENDSESSION_CLOSEAPP. Per altre informazioni, vedere Linee guida per le applicazioni.
EWX_SHUTDOWN
0x00000001
Arresta il sistema a un punto in cui è sicuro disattivare la potenza. Tutti i buffer di file sono stati scaricati su disco e tutti i processi in esecuzione sono stati arrestati.

Il processo di chiamata deve avere il privilegio di SE_SHUTDOWN_NAME. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

Se si specifica questo flag, l'alimentazione non verrà disattivata anche se il sistema supporta la funzionalità di disattivazione. È necessario specificare EWX_POWEROFF per eseguire questa operazione. Windows XP con SP1: Se il sistema supporta la funzionalità di disattivazione, specificando questo flag disattiva l'alimentazione.

 

Questo parametro può facoltativamente includere uno dei valori seguenti.

Valore Significato
EWX_FORCE
0x00000004
Questo flag non ha alcun effetto se i servizi del terminale sono abilitati. In caso contrario, il sistema non invia il messaggio di WM_QUERYENDSESSION . Ciò può causare la perdita di dati da parte delle applicazioni. Pertanto, è consigliabile usare questo flag solo in un'emergenza.
EWX_FORCEIFHUNG
0x00000010
Forza i processi a terminare se non rispondono al messaggio WM_QUERYENDSESSION o WM_ENDSESSION entro l'intervallo di timeout. Per ulteriori informazioni, vedere la sezione Osservazioni.

[in] dwReason

Motivo dell'avvio dell'arresto. Questo parametro deve essere uno dei codici di motivo di arresto del sistema.

Se questo parametro è zero, il codice SHTDN_REASON_FLAG_PLANNED motivo non verrà impostato e pertanto l'azione predefinita è un arresto non definito registrato come "Nessun titolo per questo motivo potrebbe essere trovato". Per impostazione predefinita, è anche un arresto non pianificato. A seconda della configurazione del sistema, un arresto non pianificato attiva la creazione di un file contenente le informazioni sullo stato del sistema, che può ritardare l'arresto. Pertanto, non usare zero per questo parametro.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero. Poiché la funzione viene eseguita in modo asincrono, un valore restituito diverso da zero indica che l'arresto è stato avviato. Non indica se l'arresto avrà esito positivo. È possibile che il sistema, l'utente o un'altra applicazione interrompa l'arresto.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

La funzione ExitWindowsEx restituisce non appena ha avviato il processo di arresto. Il logoff o l'arresto procede in modo asincrono. La funzione è progettata per arrestare tutti i processi nella sessione di accesso del chiamante. Pertanto, se non si è l'utente interattivo, la funzione può avere esito positivo senza arrestare effettivamente il computer. Se non si è l'utente interattivo, usare la funzione InitiateSystemShutdown o InitiateSystemShutdownEx .

Un valore restituito diverso da zero non indica che il logoff è stato o avrà esito positivo. L'arresto è un processo asincrono e può verificarsi a lungo dopo che la chiamata API è stata restituita o meno. Anche se il valore di timeout è zero, l'arresto può comunque essere interrotto da applicazioni, servizi o anche dal sistema. Il valore restituito non zero indica che la convalida dei diritti e dei parametri è stata completata e che il sistema ha accettato la richiesta di arresto.

Quando questa funzione viene chiamata, il chiamante deve specificare se le applicazioni con modifiche non salvate devono essere chiuse in modo imprevisto. Se il chiamante sceglie di non forzare la chiusura di queste applicazioni e un'applicazione con modifiche non salvate viene eseguita nella sessione della console, l'arresto rimarrà in corso fino a quando l'utente ha eseguito l'accesso alla sessione della console interrompendo l'arresto, salva le modifiche, chiude l'applicazione o forza la chiusura dell'applicazione. Durante questo periodo, l'arresto potrebbe non essere interrotto tranne per l'utente della console e un altro arresto potrebbe non essere avviato.

La chiamata a questa funzione con il valore del parametro uFlags impostato su EWX_FORCE evita questa situazione. Tenere presente che questa operazione può causare la perdita di dati.

Per impostare una priorità di arresto per un'applicazione rispetto ad altre applicazioni nel sistema, usare la funzione SetProcessShutdownParameters .

Durante un'operazione di arresto o disconnessione, le applicazioni in esecuzione possono rispondere a una richiesta di arresto specifica. Se questa ora scade prima che tutte le applicazioni siano state arrestate, il sistema visualizza un'interfaccia utente che consente all'utente di arrestare in modo forcibmente il sistema o di annullare la richiesta di arresto. Se viene specificato il valore EWX_FORCE, il sistema forza l'esecuzione delle applicazioni a interrompere la scadenza dell'ora.

Se viene specificato il valore EWX_FORCEIFHUNG, il sistema forza la chiusura delle applicazioni bloccate e non visualizza la finestra di dialogo.

I processi della console ricevono un messaggio di notifica separato, CTRL_SHUTDOWN_EVENT o CTRL_LOGOFF_EVENT, in quanto la situazione garantisce. Un processo della console indirizza questi messaggi alla funzione HandlerRoutine . ExitWindowsEx invia questi messaggi di notifica in modo asincrono; pertanto, un'applicazione non può presupporre che i messaggi di notifica della console siano stati gestiti quando viene restituita una chiamata a ExitWindowsEx .

Per arrestare o riavviare il sistema, il processo chiamante deve usare la funzione AdjustTokenPrivileges per abilitare il privilegio SE_SHUTDOWN_NAME. Per altre informazioni, vedere Esecuzione con privilegi speciali.

Esempio

Per un esempio, vedere Come arrestare il sistema.

Requisiti

   
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione winuser.h (include Windows.h)
Libreria User32.lib
DLL User32.dll
Set di API ext-ms-win-ntuser-misc-l1-1-0 (introdotto in Windows 8)

Vedi anche

RegolaTokenPrivileges

HandlerRoutine

Disconnessione

SetProcessShutdownParameters

Arresto

Funzioni di arresto del sistema