Partager via


Point d’entrée de service

Les services sont généralement écrits en tant qu’applications console. Le point d’entrée d’une application console est sa fonction principale. La fonction principale reçoit les arguments de la valeur ImagePath de la clé de Registre pour le service. Pour plus d’informations, consultez la section Remarques de la fonctionCreateService.

Lorsque le SCM démarre un programme de service, il attend qu’il appelle la fonction StartServiceCtrlDispatcher. Utilisez les instructions suivantes.

  • Un service de type SERVICE_WIN32_OWN_PROCESS doit appeler StartServiceCtrlDispatcher immédiatement, à partir de son thread principal. Vous pouvez effectuer une initialisation après le démarrage du service, comme décrit dans fonction ServiceMain.
  • Si le type de service est SERVICE_WIN32_SHARE_PROCESS et qu’il existe une initialisation courante pour tous les services du programme, vous pouvez effectuer l’initialisation dans le thread principal avant d’appeler StartServiceCtrlDispatcher, tant qu’elle prend moins de 30 secondes. Sinon, vous devez créer un autre thread pour effectuer l’initialisation commune, tandis que le thread principal appelle StartServiceCtrlDispatcher. Vous devez toujours effectuer une initialisation spécifique au service après le démarrage du service.

La fonction StartServiceCtrlDispatcher prend une structure SERVICE_TABLE_ENTRY pour chaque service contenu dans le processus. Chaque structure spécifie le nom du service et le point d’entrée du service. Pour obtenir un exemple, consultez Écriture de la fonction principale d’un programme de service.

Si StartServiceCtrlDispatcher réussit, le thread appelant ne retourne pas tant que tous les services en cours d’exécution dans le processus n’ont pas entré l’état SERVICE_STOPPED. Le SCM envoie des demandes de contrôle à ce thread via un canal nommé. Le thread agit comme répartiteur de contrôle, effectuant les tâches suivantes :

  • Créez un thread pour appeler le point d’entrée approprié lorsqu’un nouveau service est démarré.
  • Appelez la fonction de gestionnaire appropriée pour gérer les demandes de contrôle de service.

écrire la fonction principale d’un programme de service