Partilhar via


Ponto de entrada de serviço

Os serviços geralmente são escritos como aplicativos de console. O ponto de entrada de um aplicativo de console é sua função principal. A função principal do recebe argumentos do ImagePath valor da chave do Registro para o serviço. Para obter mais informações, consulte a seção Comentários da funçãoCreateService.

Quando o SCM inicia um programa de serviço, ele aguarda que ele chame a funçãoStartServiceCtrlDispatcher. Use as seguintes diretrizes.

  • Um serviço do tipo SERVICE_WIN32_OWN_PROCESS deve chamar StartServiceCtrlDispatcher imediatamente, a partir de seu thread principal. Você pode executar qualquer inicialização após o início do serviço, conforme descrito em Service ServiceMain Function.
  • Se o tipo de serviço for SERVICE_WIN32_SHARE_PROCESS e houver inicialização comum para todos os serviços no programa, você poderá executar a inicialização no thread principal antes de chamar StartServiceCtrlDispatcher, desde que demore menos de 30 segundos. Caso contrário, você deve criar outro thread para fazer a inicialização comum, enquanto o thread principal chama StartServiceCtrlDispatcher. Você ainda deve executar qualquer inicialização específica do serviço depois que o serviço for iniciado.

A funçãoStartServiceCtrlDispatcher usa uma estrutura SERVICE_TABLE_ENTRY para cada serviço contido no processo. Cada estrutura especifica o nome do serviço e o ponto de entrada para o serviço. Para obter um exemplo, consulte Escrevendo a função principal de um programa de serviço.

Se StartServiceCtrlDispatcher for bem-sucedido, o thread de chamada não retornará até que todos os serviços em execução no processo tenham entrado no estado SERVICE_STOPPED. O SCM envia solicitações de controle para esse thread por meio de um pipe nomeado. O thread atua como um despachante de controle, executando as seguintes tarefas:

  • Crie um novo thread para chamar o ponto de entrada apropriado quando um novo serviço for iniciado.
  • Chame a função de manipulador de apropriada para lidar com solicitações de controle de serviço.

Escrevendo a função principal de um programa de serviço