Функция ExitWindowsEx (winuser.h)
Выключает интерактивного пользователя, завершает работу системы или завершает работу и перезапускает систему. Он отправляет сообщение WM_QUERYENDSESSION всем приложениям, чтобы определить, можно ли их завершить.
Синтаксис
BOOL ExitWindowsEx(
[in] UINT uFlags,
[in] DWORD dwReason
);
Параметры
[in] uFlags
Тип завершения работы. Этот параметр должен включать одно из следующих значений.
Значение | Значение |
---|---|
|
Начиная с Windows 8: Вы можете подготовить систему к более быстрому запуску, объединив флаг EWX_HYBRID_SHUTDOWN с флагом EWX_SHUTDOWN . |
|
Завершает работу всех процессов, запущенных в сеансе входа в процесс, который вызвал функцию ExitWindowsEx . Затем пользователь будет выходить из системы.
Этот флаг может использоваться только процессами, запущенными в интерактивном сеансе входа пользователя. |
|
Завершает работу системы и отключает питание. Система должна поддерживать функцию выключения питания.
Вызывающий процесс должен иметь привилегию SE_SHUTDOWN_NAME. Дополнительные сведения см. в разделе "Примечания". |
|
Завершает работу системы, а затем перезапускает систему.
Вызывающий процесс должен иметь привилегию SE_SHUTDOWN_NAME. Дополнительные сведения см. в разделе "Примечания". |
|
Завершает работу системы, а затем перезапускает ее, а также все приложения, зарегистрированные для перезапуска с помощью функции RegisterApplicationRestart . Эти приложения получают сообщение WM_QUERYENDSESSION с параметром lParam , для ENDSESSION_CLOSEAPP значение. Дополнительные сведения см. в разделе Рекомендации по приложениям. |
|
Отключает систему до точки, когда можно безопасно отключить питание. Все буферы файлов были сброшены на диск, а все запущенные процессы остановлены.
Вызывающий процесс должен иметь привилегию SE_SHUTDOWN_NAME. Дополнительные сведения см. в разделе "Примечания". Указание этого флага не приведет к отключению питания, даже если система поддерживает функцию выключения питания. Для этого необходимо указать EWX_POWEROFF. Windows XP с пакетом обновления 1 (SP1): Если система поддерживает функцию выключения питания, указание этого флага отключает питание. |
При необходимости этот параметр может включать одно из следующих значений.
Значение | Значение |
---|---|
|
Этот флаг не действует, если включены службы терминалов. В противном случае система не отправляет WM_QUERYENDSESSION сообщение. Это может привести к потере данных приложениями. Поэтому этот флаг следует использовать только в чрезвычайных ситуациях. |
|
Принудительно завершает работу процессов, если они не отвечают на 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) |