서비스 진입점

서비스는 일반적으로 콘솔 애플리케이션으로 작성됩니다. 콘솔 애플리케이션의 진입점은 기본 함수입니다. 기본 함수는 서비스의 레지스트리 키에서 ImagePath 값에서 인수를 받습니다. 자세한 내용은 CreateService 함수의 설명 섹션을 참조하세요.

SCM이 서비스 프로그램을 시작하면 StartServiceCtrlDispatcher 함수를 호출할 때까지 기다립니다. 다음 지침을 사용합니다.

  • SERVICE_WIN32_OWN_PROCESS 형식의 서비스는 기본 스레드에서 StartServiceCtrlDispatcher를 즉시 호출해야 합니다. Service ServiceMain 함수에 설명된 대로 서비스가 시작된 후 초기화를 수행할 수 있습니다.
  • 서비스 유형이 SERVICE_WIN32_SHARE_PROCESS 프로그램의 모든 서비스에 대한 일반적인 초기화가 있는 경우 StartServiceCtrlDispatcher를 호출하기 전에 기본 스레드에서 초기화를 수행할 수 있습니다(30초 미만인 경우). 그렇지 않으면 일반적인 초기화를 수행하는 다른 스레드를 만들어야 하고, 기본 스레드는 StartServiceCtrlDispatcher를 호출합니다. 서비스가 시작된 후에도 서비스별 초기화를 수행해야 합니다.

StartServiceCtrlDispatcher 함수는 프로세스에 포함된 각 서비스에 대해 SERVICE_TABLE_ENTRY 구조를 사용합니다. 각 구조체는 서비스의 서비스 이름과 진입점을 지정합니다. 예제는 서비스 프로그램의 기본 함수 작성을 참조하세요.

StartServiceCtrlDispatcher가 성공하면 프로세스에서 실행 중인 모든 서비스가 SERVICE_STOPPED 상태가 될 때까지 호출 스레드가 반환되지 않습니다. SCM은 명명된 파이프를 통해 이 스레드에 제어 요청을 보냅니다. 스레드는 컨트롤 디스패처 역할을 하며 다음 작업을 수행합니다.

  • 새 서비스가 시작될 때 적절한 진입점을 호출하는 새 스레드를 만듭니다.
  • 적절한 처리기 함수 를 호출하여 서비스 제어 요청을 처리합니다.

서비스 프로그램의 기본 함수 작성