SERVICE_STATUS_PROCESS 구조체(winsvc.h)

서비스에 대한 프로세스 상태 정보를 포함합니다. ControlServiceEx, EnumServicesStatusEx, NotifyServiceStatusChangeQueryServiceStatusEx 함수는 이 구조를 사용합니다.

구문

typedef struct _SERVICE_STATUS_PROCESS {
  DWORD dwServiceType;
  DWORD dwCurrentState;
  DWORD dwControlsAccepted;
  DWORD dwWin32ExitCode;
  DWORD dwServiceSpecificExitCode;
  DWORD dwCheckPoint;
  DWORD dwWaitHint;
  DWORD dwProcessId;
  DWORD dwServiceFlags;
} SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;

멤버

dwServiceType

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

의미
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
서비스는 파일 시스템 드라이버입니다.
SERVICE_KERNEL_DRIVER
0x00000001
서비스는 디바이스 드라이버입니다.
SERVICE_WIN32_OWN_PROCESS
0x00000010
서비스는 자체 프로세스에서 실행됩니다.
SERVICE_WIN32_SHARE_PROCESS
0x00000020
서비스는 프로세스를 다른 서비스와 공유합니다.
 

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

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

자세한 내용은 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_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_PAUSE 및 SERVICE_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 알림을 보낼 수 있습니다.

dwWin32ExitCode

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

dwServiceSpecificExitCode

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

dwCheckPoint

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

dwWaitHint

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

dwProcessId

서비스의 프로세스 식별자입니다.

dwServiceFlags

이 멤버는 다음 값 중 하나일 수 있습니다.

의미
0
서비스가 시스템 프로세스가 아니거나 실행되고 있지 않은 프로세스에서 실행되고 있습니다.

서비스가 시스템 프로세스가 아닌 프로세스에서 실행되는 경우 dwProcessId 는 0이 아닙니다. 서비스가 실행되고 있지 않으면 dwProcessId 는 0입니다.

SERVICE_RUNS_IN_SYSTEM_PROCESS
0x00000001
서비스는 항상 실행되어야 하는 시스템 프로세스에서 실행됩니다.

요구 사항

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

추가 정보

ControlServiceEx

EnumServicesStatusEx

NotifyServiceStatusChange

QueryServiceStatusEx