Поделиться через


Функция ExitWindowsEx (winuser.h)

Выключает интерактивного пользователя, завершает работу системы или завершает работу и перезапускает систему. Он отправляет сообщение WM_QUERYENDSESSION всем приложениям, чтобы определить, можно ли их завершить.

Синтаксис

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

Параметры

[in] uFlags

Тип завершения работы. Этот параметр должен включать одно из следующих значений.

Значение Значение
EWX_HYBRID_SHUTDOWN
0x00400000
Начиная с Windows 8: Вы можете подготовить систему к более быстрому запуску, объединив флаг EWX_HYBRID_SHUTDOWN с флагом EWX_SHUTDOWN .
EWX_LOGOFF
0
Завершает работу всех процессов, запущенных в сеансе входа в процесс, который вызвал функцию ExitWindowsEx . Затем пользователь будет выходить из системы.

Этот флаг может использоваться только процессами, запущенными в интерактивном сеансе входа пользователя.

EWX_POWEROFF
0x00000008
Завершает работу системы и отключает питание. Система должна поддерживать функцию выключения питания.

Вызывающий процесс должен иметь привилегию SE_SHUTDOWN_NAME. Дополнительные сведения см. в разделе "Примечания".

EWX_REBOOT
0x00000002
Завершает работу системы, а затем перезапускает систему.

Вызывающий процесс должен иметь привилегию SE_SHUTDOWN_NAME. Дополнительные сведения см. в разделе "Примечания".

EWX_RESTARTAPPS
0x00000040
Завершает работу системы, а затем перезапускает ее, а также все приложения, зарегистрированные для перезапуска с помощью функции RegisterApplicationRestart . Эти приложения получают сообщение WM_QUERYENDSESSION с параметром lParam , для ENDSESSION_CLOSEAPP значение. Дополнительные сведения см. в разделе Рекомендации по приложениям.
EWX_SHUTDOWN
0x00000001
Отключает систему до точки, когда можно безопасно отключить питание. Все буферы файлов были сброшены на диск, а все запущенные процессы остановлены.

Вызывающий процесс должен иметь привилегию SE_SHUTDOWN_NAME. Дополнительные сведения см. в разделе "Примечания".

Указание этого флага не приведет к отключению питания, даже если система поддерживает функцию выключения питания. Для этого необходимо указать EWX_POWEROFF. Windows XP с пакетом обновления 1 (SP1): Если система поддерживает функцию выключения питания, указание этого флага отключает питание.

 

При необходимости этот параметр может включать одно из следующих значений.

Значение Значение
EWX_FORCE
0x00000004
Этот флаг не действует, если включены службы терминалов. В противном случае система не отправляет WM_QUERYENDSESSION сообщение. Это может привести к потере данных приложениями. Поэтому этот флаг следует использовать только в чрезвычайных ситуациях.
EWX_FORCEIFHUNG
0x00000010
Принудительно завершает работу процессов, если они не отвечают на WM_QUERYENDSESSION или WM_ENDSESSION сообщение в течение интервала времени ожидания. Дополнительные сведения см. в разделе «Примечания».

[in] dwReason

Причина инициации завершения работы. Этот параметр должен быть одним из кодов причин завершения работы системы.

Если этот параметр равен нулю, код причины SHTDN_REASON_FLAG_PLANNED не будет задан, поэтому действием по умолчанию является неопределенное завершение работы, которое регистрируется как "Не удалось найти название по этой причине". По умолчанию это также незапланированное завершение работы. В зависимости от того, как настроена система, незапланированное завершение работы запускает создание файла, содержащего сведения о состоянии системы, что может задержать завершение работы. Поэтому не используйте ноль для этого параметра.

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение. Так как функция выполняется асинхронно, ненулевое возвращаемое значение указывает на то, что завершение работы было инициировано. Он не указывает, будет ли завершение работы успешно завершено. Вполне возможно, что система, пользователь или другое приложение прервет завершение работы.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Функция ExitWindowsEx возвращается, как только она инициирует процесс завершения работы. Завершение работы или выход из системы выполняется асинхронно. Функция предназначена для остановки всех процессов в сеансе входа вызывающего абонента. Таким образом, если вы не являетесь интерактивным пользователем, функция может быть успешной без фактического завершения работы компьютера. Если вы не являетесь интерактивным пользователем, используйте функцию InitiateSystemShutdown или InitiateSystemShutdownEx .

Ненулевое возвращаемое значение не означает, что выход был или будет успешным. Завершение работы — это асинхронный процесс, который может происходить через много времени после возврата вызова API или вообще не происходит. Даже если время ожидания равно нулю, завершение работы по-прежнему может быть прервано приложениями, службами или даже системой. Ненулевое возвращаемое значение указывает, что проверка прав и параметров прошла успешно и что система приняла запрос на завершение работы.

При вызове этой функции вызывающий объект должен указать, следует ли принудительно закрывать приложения с несохраненных изменений. Если вызывающий объект решит не принудительно закрывать эти приложения и приложение с несохраненных изменений запущено в сеансе консоли, завершение работы будет продолжаться до тех пор, пока пользователь, выполнивший вход в сеанс консоли, не прервет завершение работы, сохранит изменения, не закроет приложение или не заставит приложение закрыться. В течение этого периода завершение работы может быть прервано только пользователем консоли, и другое завершение работы не может быть инициировано.

Вызов этой функции со значением параметра uFlags , равным EWX_FORCE, позволяет избежать такой ситуации. Помните, что это может привести к потере данных.

Чтобы задать приоритет завершения работы приложения относительно других приложений в системе, используйте функцию SetProcessShutdownParameters .

Во время завершения работы или выхода из системы запущенным приложениям разрешено определенное количество времени, чтобы ответить на запрос на завершение работы. Если это время истечет до остановки всех приложений, система отображает пользовательский интерфейс, позволяющий пользователю принудительно завершить работу системы или отменить запрос на завершение работы. Если указано значение EWX_FORCE, система принудительно останавливает выполнение приложений по истечении времени.

Если указано значение EWX_FORCEIFHUNG, система принудительно закрывает зависающее приложение и не отображает диалоговое окно.

Консольные процессы получают отдельное уведомление, CTRL_SHUTDOWN_EVENT или CTRL_LOGOFF_EVENT, как того требует ситуация. Процесс консоли направляет эти сообщения в свою функцию HandlerRoutine . ExitWindowsEx отправляет эти уведомления асинхронно; Таким образом, приложение не может предположить, что сообщения уведомлений консоли были обработаны при вызове ExitWindowsEx .

Чтобы завершить работу или перезапустить систему, вызывающий процесс должен использовать функцию AdjustTokenPrivileges , чтобы включить привилегию SE_SHUTDOWN_NAME. Дополнительные сведения см. в разделе Выполнение с особыми привилегиями.

Примеры

Пример см. в разделе Завершение работы системы.

Требования

   
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll
Набор API ext-ms-win-ntuser-misc-l1-1-0 (появилось в Windows 8)

См. также раздел

AdjustTokenPrivileges

HandlerRoutine

Выход из системы

SetProcessShutdownParameters

Завершает работу

Функции завершения работы системы