Compartilhar 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 de principal. A função de 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ção CreateService.

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

  • Um serviço do tipo SERVICE_WIN32_OWN_PROCESS deve chamar StartServiceCtrlDispatcher imediatamente, de seu thread principal. Você pode executar qualquer inicialização após o início do serviço, conforme descrito em ServiceMain Function.
  • Se o tipo de serviço for SERVICE_WIN32_SHARE_PROCESS e houver uma 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 leve 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 após o início do serviço.

A função StartServiceCtrlDispatcher 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 Gravando 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 dispatcher 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.

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