서비스 진입점
서비스는 일반적으로 콘솔 애플리케이션으로 작성됩니다. 콘솔 애플리케이션의 진입점은 주 함수입니다. 기본 함수는 서비스에 대한 레지스트리 키에서 ImagePath 값에서 인수를 받습니다. 자세한 내용은 CreateService 함수의 설명 섹션을 참조하세요.
SCM이 서비스 프로그램을 시작하면 StartServiceCtrlDispatcher 함수를 호출할 때까지 기다립니다. 다음 지침을 사용합니다.
- SERVICE_WIN32_OWN_PROCESS 형식의 서비스는 주 스레드에서 즉시 StartServiceCtrlDispatcher 호출해야 합니다. ServiceMain 함수설명한 대로 서비스가 시작된 후 초기화를 수행할 수 있습니다.
- 서비스 유형이 SERVICE_WIN32_SHARE_PROCESS 프로그램의 모든 서비스에 대한 일반적인 초기화가 있는 경우 30초 미만인 경우 StartServiceCtrlDispatcher호출하기 전에 주 스레드에서 초기화를 수행할 수 있습니다. 그렇지 않으면 일반 초기화를 수행할 다른 스레드를 만들어야 합니다. 반면 기본 스레드는 StartServiceCtrlDispatcher를 호출하는. 서비스가 시작된 후에도 서비스별 초기화를 수행해야 합니다.
StartServiceCtrlDispatcher 함수는 프로세스에 포함된 각 서비스에 대해 SERVICE_TABLE_ENTRY 구조를 취합니다. 각 구조체는 서비스의 서비스 이름과 진입점을 지정합니다. 예를 들어 서비스 프로그램의 주 함수작성을 참조하세요.
StartServiceCtrlDispatcher 성공하면 프로세스에서 실행 중인 모든 서비스가 SERVICE_STOPPED 상태가 될 때까지 호출 스레드가 반환되지 않습니다. SCM은 명명된 파이프를 통해 이 스레드에 제어 요청을 보냅니다. 스레드는 컨트롤 디스패처 역할을 하며 다음 작업을 수행합니다.
- 새 서비스가 시작될 때 적절한 진입점을 호출하는 새 스레드를 만듭니다.
- 적절한 처리기 함수 호출하여 서비스 제어 요청을 처리합니다.
관련 항목