Liste des enregistrements de service
Chaque entrée de service étant lue à partir de la base de données des services installés, le SCM crée un enregistrement de service pour le service. Un enregistrement de service inclut les éléments suivants :
- Nom du service
- Type de démarrage (démarrage automatique ou démarrage à la demande)
- État du service (voir la structure SERVICE_STATUS)
- Type
État actuel
Codes de contrôle acceptables
Code de sortie
Indicateur d’attente - Pointeur vers la liste des dépendances
Le nom d’utilisateur et le mot de passe d’un compte sont spécifiés au moment de l’installation du service. Le SCM stocke le nom d’utilisateur dans le Registre et le mot de passe dans une partie sécurisée de l’autorité de sécurité locale (LSA). L’administrateur système peut créer des comptes avec des mots de passe qui n’expirent jamais. L’administrateur système peut également créer des comptes avec des mots de passe qui expirent et gèrent les comptes en modifiant régulièrement les mots de passe.
Le SCM conserve deux copies du mot de passe d’un compte d’utilisateur, d’un mot de passe actuel et d’un mot de passe de sauvegarde. Le mot de passe spécifié la première fois que le service est installé est stocké en tant que mot de passe actuel et que le mot de passe de sauvegarde n’est pas initialisé. Lorsque le SCM tente d’exécuter le service dans le contexte de sécurité du compte d’utilisateur, il utilise le mot de passe actuel. Si le mot de passe actuel est utilisé avec succès, il est également enregistré en tant que mot de passe de sauvegarde. Si le mot de passe est modifié avec la fonction ChangeServiceConfig ou l’utilitaire du panneau de configuration Services, le nouveau mot de passe est stocké en tant que mot de passe actuel et le mot de passe précédent est stocké comme mot de passe de sauvegarde. Si le SCM tente de démarrer le service et que le mot de passe actuel échoue, il utilise le mot de passe de sauvegarde. Si le mot de passe de sauvegarde est utilisé avec succès, il est enregistré en tant que mot de passe actuel.
Le SCM met à jour l’état du service lorsqu’un service l’envoie à des notifications d’état à l’aide de la fonctionSetServiceStatus. Le SCM conserve l’état d’un service de pilote en interrogeant le système d’E/S, au lieu de recevoir des notifications d’état, comme il le fait à partir d’un service.
Un service peut inscrire des informations de type supplémentaires en appelant la fonction SetServiceBits. Les fonctions NetServerGetInfo et NetServerEnum obtiennent les types de service pris en charge.