Share via


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 함수를 사용하여 다시 시작하기 위해 등록된 애플리케이션뿐만 아니라 시스템을 다시 시작합니다. 이러한 애플리케이션은 lParamENDSESSION_CLOSEAPP 값으로 설정된 WM_QUERYENDSESSION 메시지를 받습니다. 자세한 내용은 애플리케이션에 대한 지침을 참조하세요.
EWX_SHUTDOWN
0x00000001
전원을 끄는 것이 안전한 지점으로 시스템을 종료합니다. 모든 파일 버퍼가 디스크로 플러시되었으며 실행 중인 모든 프로세스가 중지되었습니다.

호출 프로세스에는 SE_SHUTDOWN_NAME 권한이 있어야 합니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

이 플래그를 지정하면 시스템에서 전원 해제 기능을 지원하는 경우에도 전원이 꺼지지 않습니다. 이 작업을 수행하려면 EWX_POWEROFF 지정해야 합니다. WINDOWS XP SP1: 시스템에서 전원 끄기 기능을 지원하는 경우 이 플래그를 지정하면 전원이 꺼집니다.

 

이 매개 변수는 필요에 따라 다음 값 중 하나를 포함할 수 있습니다.

의미
EWX_FORCE
0x00000004
터미널 서비스를 사용하도록 설정한 경우에는 이 플래그가 적용되지 않습니다. 그렇지 않으면 시스템에서 WM_QUERYENDSESSION 메시지를 보내지 않습니다. 이로 인해 애플리케이션에서 데이터가 손실될 수 있습니다. 따라서 비상 상황에서만 이 플래그를 사용해야 합니다.
EWX_FORCEIFHUNG
0x00000010
프로세스가 시간 제한 간격 내에 WM_QUERYENDSESSION 또는 WM_ENDSESSION 메시지에 응답하지 않으면 강제로 종료됩니다. 자세한 내용은 주의 섹션을 참조하십시오.

[in] dwReason

종료를 시작하는 이유입니다. 이 매개 변수는 시스템 종료 이유 코드 중 하나여야 합니다.

이 매개 변수가 0이면 SHTDN_REASON_FLAG_PLANNED 이유 코드가 설정되지 않으므로 기본 작업은 "이러한 이유로 제목을 찾을 수 없음"으로 기록되는 정의되지 않은 종료입니다. 기본적으로 계획되지 않은 종료이기도 합니다. 시스템 구성 방법에 따라 계획되지 않은 종료는 시스템 상태 정보가 포함된 파일 생성을 트리거하여 종료를 지연할 수 있습니다. 따라서 이 매개 변수에는 0을 사용하지 마세요.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다. 함수가 비동기적으로 실행되기 때문에 0이 아닌 반환 값은 종료가 시작되었음을 나타냅니다. 종료가 성공할지 여부는 나타내지 않습니다. 시스템, 사용자 또는 다른 애플리케이션이 종료를 중단할 수 있습니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

ExitWindowsEx 함수는 종료 프로세스를 시작하는 즉시 를 반환합니다. 그런 다음 종료 또는 로그오프가 비동기적으로 진행됩니다. 함수는 호출자의 로그온 세션에 있는 모든 프로세스를 중지하도록 설계되었습니다. 따라서 대화형 사용자가 아닌 경우 실제로 컴퓨터를 종료하지 않고도 함수가 성공할 수 있습니다. 대화형 사용자가 아닌 경우 InitiateSystemShutdown 또는 InitiateSystemShutdownEx 함수를 사용합니다.

0이 아닌 반환 값이 로그오프가 성공했거나 성공한 것은 아닙니다. 종료는 비동기 프로세스이며 API 호출이 반환된 지 오래 지났거나 전혀 발생하지 않을 수 있습니다. 시간 제한 값이 0이더라도 애플리케이션, 서비스 또는 시스템에서 종료를 계속 중단할 수 있습니다. 0이 아닌 반환 값은 권한 및 매개 변수의 유효성 검사가 성공했으며 시스템이 종료 요청을 수락했음을 나타냅니다.

이 함수가 호출되면 호출자는 저장되지 않은 변경 내용이 있는 애플리케이션을 강제로 닫아야 하는지 여부를 지정해야 합니다. 호출자가 이러한 애플리케이션을 강제로 닫지 않도록 선택하고 저장되지 않은 변경 내용이 있는 애플리케이션이 콘솔 세션에서 실행되는 경우 콘솔 세션에 로그인한 사용자가 종료를 중단하거나, 변경 내용을 저장하거나, 애플리케이션을 닫거나, 강제로 애플리케이션을 닫을 때까지 종료가 진행 중입니다. 이 기간 동안 콘솔 사용자를 제외하고 종료가 중단되지 않을 수 있으며 다른 종료가 시작되지 않을 수 있습니다.

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
헤더 winuser.h(Windows.h 포함)
라이브러리 User32.lib
DLL User32.dll
API 세트 ext-ms-win-ntuser-misc-l1-1-0(Windows 8에서 도입)

추가 정보

AdjustTokenPrivileges

HandlerRoutine

로깅 끄기

SetProcessShutdownParameters

종료

시스템 종료 함수