SERVICE_STATUS 구조체(winsvc.h)

서비스에 대한 상태 정보를 포함합니다. ControlService, EnumDependentServices, EnumServicesStatusQueryServiceStatus 함수는 이 구조를 사용합니다. 서비스는 SetServiceStatus 함수에서 이 구조를 사용하여 현재 상태를 서비스 제어 관리자에 보고합니다.

구문

typedef struct _SERVICE_STATUS {
  DWORD dwServiceType;
  DWORD dwCurrentState;
  DWORD dwControlsAccepted;
  DWORD dwWin32ExitCode;
  DWORD dwServiceSpecificExitCode;
  DWORD dwCheckPoint;
  DWORD dwWaitHint;
} SERVICE_STATUS, *LPSERVICE_STATUS;

멤버

dwServiceType

서비스의 유형입니다. 이 멤버는 다음 값 중 하나일 수 있습니다.

의미
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
서비스는 파일 시스템 드라이버입니다.
SERVICE_KERNEL_DRIVER
0x00000001
서비스는 디바이스 드라이버입니다.
SERVICE_WIN32_OWN_PROCESS
0x00000010
서비스는 자체 프로세스에서 실행됩니다.
SERVICE_WIN32_SHARE_PROCESS
0x00000020
서비스는 다른 서비스와 프로세스를 공유합니다.
SERVICE_USER_OWN_PROCESS
0x00000050
서비스는 로그온한 사용자 계정으로 자체 프로세스에서 실행됩니다.
SERVICE_USER_SHARE_PROCESS
0x00000060
서비스는 로그온한 사용자 계정으로 실행되는 하나 이상의 다른 서비스와 프로세스를 공유합니다.
 

서비스 유형이 SERVICE_WIN32_OWN_PROCESS 또는 SERVICE_WIN32_SHARE_PROCESS 있고 서비스가 LocalSystem 계정의 컨텍스트에서 실행 중인 경우 다음 형식도 지정할 수 있습니다.

의미
SERVICE_INTERACTIVE_PROCESS
0x00000100
서비스는 데스크톱과 상호 작용할 수 있습니다.

자세한 내용은 Interactive Services를 참조하세요.

dwCurrentState

서비스의 현재 상태입니다. 이 멤버는 다음 값 중 하나일 수 있습니다.

의미
SERVICE_CONTINUE_PENDING
0x00000005
서비스 계속 명령이 보류 중입니다.
SERVICE_PAUSE_PENDING
0x00000006
서비스 일시 중지 명령이 보류 중입니다.
SERVICE_PAUSED
0x00000007
서비스가 일시 중지되었습니다.
SERVICE_RUNNING
0x00000004
서비스가 실행되고 있습니다.
SERVICE_START_PENDING
0x00000002
서비스가 시작되었습니다.
SERVICE_STOP_PENDING
0x00000003
서비스가 중지되었습니다.
SERVICE_STOPPED
0x00000001
서비스가 실행되고 있지 않습니다.

dwControlsAccepted

처리기 함수에서 서비스가 수락하고 처리하는 컨트롤 코드입니다( HandlerHandlerEx 참조). 사용자 인터페이스 프로세스는 ControlService 또는 ControlServiceEx 함수에서 컨트롤 명령을 지정하여 서비스를 제어할 수 있습니다. 기본적으로 모든 서비스는 SERVICE_CONTROL_INTERROGATE 값을 허용합니다.

SERVICE_CONTROL_DEVICEEVENT 값을 허용하려면 서비스에서 RegisterDeviceNotification 함수를 사용하여 디바이스 이벤트를 수신하도록 등록해야 합니다.

다음은 컨트롤 코드입니다.

제어 코드 의미
SERVICE_ACCEPT_NETBINDCHANGE
0x00000010
서비스는 중지 및 다시 시작하지 않고 바인딩의 변경 내용을 허용할 수 있는 네트워크 구성 요소입니다.

이 제어 코드를 사용하면 서비스에서 SERVICE_CONTROL_NETBINDADD, SERVICE_CONTROL_NETBINDREMOVE, SERVICE_CONTROL_NETBINDENABLESERVICE_CONTROL_NETBINDDISABLE 알림을 받을 있습니다.

SERVICE_ACCEPT_PARAMCHANGE
0x00000008
서비스는 중지하고 다시 시작하지 않고 시작 매개 변수를 다시 읽을 수 있습니다.

이 제어 코드를 사용하면 서비스에서 SERVICE_CONTROL_PARAMCHANGE 알림을 받을 수 있습니다.

SERVICE_ACCEPT_PAUSE_CONTINUE
0x00000002
서비스를 일시 중지하고 계속할 수 있습니다.

이 제어 코드를 사용하면 서비스에서 SERVICE_CONTROL_PAUSESERVICE_CONTROL_CONTINUE 알림을 받을 수 있습니다.

SERVICE_ACCEPT_PRESHUTDOWN
0x00000100
서비스는 사전 처리 작업을 수행할 수 있습니다.

이 제어 코드를 사용하면 서비스에서 SERVICE_CONTROL_PRESHUTDOWN 알림을 받을 수 있습니다. ControlServiceControlServiceEx는 이 알림을 보낼 수 없습니다. 시스템만 보낼 수 있습니다.

Windows Server 2003 및 Windows XP: 이 값은 지원되지 않습니다.

SERVICE_ACCEPT_SHUTDOWN
0x00000004
시스템 종료가 발생하면 서비스에 알림이 표시됩니다.

이 제어 코드를 사용하면 서비스에서 SERVICE_CONTROL_SHUTDOWN 알림을 받을 수 있습니다. ControlServiceControlServiceEx는 이 알림을 보낼 수 없습니다. 시스템만 보낼 수 있습니다.

SERVICE_ACCEPT_STOP
0x00000001
서비스를 중지할 수 있습니다.

이 제어 코드를 사용하면 서비스에서 SERVICE_CONTROL_STOP 알림을 받을 수 있습니다.

 

이 멤버는 HandlerEx에서만 지원되는 다음과 같은 확장된 제어 코드를 포함할 수도 있습니다. (이러한 컨트롤 코드는 ControlService 또는 ControlServiceEx에서 보낼 수 없습니다.)

제어 코드 의미
SERVICE_ACCEPT_HARDWAREPROFILECHANGE
0x00000020
컴퓨터의 하드웨어 프로필이 변경되면 서비스에 알림이 표시됩니다. 이렇게 하면 시스템에서 서비스에 SERVICE_CONTROL_HARDWAREPROFILECHANGE 알림을 보낼 수 있습니다.
SERVICE_ACCEPT_POWEREVENT
0x00000040
컴퓨터의 전원 상태가 변경되면 서비스에 알림이 표시됩니다. 이렇게 하면 시스템에서 서비스에 SERVICE_CONTROL_POWEREVENT 알림을 보낼 수 있습니다.
SERVICE_ACCEPT_SESSIONCHANGE
0x00000080
컴퓨터의 세션 상태가 변경되면 서비스에 알림이 표시됩니다. 이렇게 하면 시스템에서 서비스에 SERVICE_CONTROL_SESSIONCHANGE 알림을 보낼 수 있습니다.
SERVICE_ACCEPT_TIMECHANGE
0x00000200
시스템 시간이 변경되면 서비스에 알림이 표시됩니다. 이렇게 하면 시스템에서 서비스에 SERVICE_CONTROL_TIMECHANGE 알림을 보낼 수 있습니다.

Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: 이 제어 코드는 지원되지 않습니다.

SERVICE_ACCEPT_TRIGGEREVENT
0x00000400
서비스가 등록된 이벤트가 발생하면 서비스에 알림이 표시됩니다. 이렇게 하면 시스템에서 서비스에 SERVICE_CONTROL_TRIGGEREVENT 알림을 보낼 수 있습니다.

Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: 이 제어 코드는 지원되지 않습니다.

SERVICE_ACCEPT_USERMODEREBOOT
0x00000800
사용자가 다시 부팅을 시작하면 서비스에 알림이 표시됩니다.

Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: 이 제어 코드는 지원되지 않습니다.

dwWin32ExitCode

서비스가 시작 또는 중지 시 발생하는 오류를 보고하는 데 사용하는 오류 코드입니다. 서비스와 관련된 오류 코드를 반환하려면 dwServiceSpecificExitCode 멤버에 오류 코드가 포함되어 있음을 나타내기 위해 이 값을 ERROR_SERVICE_SPECIFIC_ERROR 설정해야 합니다. 서비스가 실행 중일 때와 정상 종료 시 이 값을 NO_ERROR 설정해야 합니다.

dwServiceSpecificExitCode

서비스가 시작 또는 중지되는 동안 오류가 발생할 때 서비스가 반환하는 서비스별 오류 코드입니다. dwWin32ExitCode 멤버가 ERROR_SERVICE_SPECIFIC_ERROR 설정되지 않는 한 이 값은 무시됩니다.

dwCheckPoint

서비스가 주기적으로 증가하여 긴 시작, 중지, 일시 중지 또는 계속 작업 중에 진행 상황을 보고하는 확인 지점 값입니다. 예를 들어 서비스가 시작할 때 초기화의 각 단계를 완료할 때 이 값을 증가시켜야 합니다. 서비스에 대한 작업을 호출한 사용자 인터페이스 프로그램은 이 값을 사용하여 긴 작업 동안 서비스의 진행률을 추적합니다. 이 값은 유효하지 않으며 서비스에 시작, 중지, 일시 중지 또는 계속 작업이 보류 중인 경우 0이어야 합니다.

dwWaitHint

보류 중인 시작, 중지, 일시 중지 또는 계속 작업에 필요한 예상 시간(밀리초)입니다. 지정된 시간이 경과하기 전에 서비스는 증분된 dwCheckPoint 값 또는 dwCurrentState 변경으로 SetServiceStatus 함수에 대한 다음 호출을 수행해야 합니다. dwWaitHint에서 지정한 시간이 지나고 dwCheckPoint가 증가하지 않았거나 dwCurrentState가 변경되지 않은 경우 서비스 제어 관리자 또는 서비스 제어 프로그램에서 오류가 발생하고 서비스를 중지해야 한다고 가정할 수 있습니다. 그러나 서비스가 다른 서비스와 프로세스를 공유하는 경우 서비스 제어 관리자는 프로세스를 공유하는 다른 서비스도 종료해야 하므로 서비스 애플리케이션을 종료할 수 없습니다.

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
머리글 winsvc.h(Windows.h 포함)

추가 정보

ControlService

ControlServiceEx

EnumDependentServices

EnumServicesStatus

QueryServiceStatus

SetServiceStatus