À l’ère du numérique, un démarrage rapide et un fonctionnement efficace du système sont extrêmement importants pour les utilisateurs. Le système Windows peut démarrer de nombreux services en peu de temps. Cela s'appuie sur un processus système appelé Service Control Manager (SCM). Le fonctionnement du SCM est essentiel pour améliorer la vitesse de démarrage du système. Examinons de plus près le fonctionnement de ce processus.
SCM est un processus système spécial sous les systèmes d'exploitation de la série Windows NT. Il est responsable du démarrage, de l'arrêt et de la gestion des processus de service Windows.
Le fichier exécutable de SCM se trouve dans %SystemRoot%\System32\services.exe, et sa tâche principale est de démarrer tous les services configurés pour démarrer automatiquement. Lorsque le système démarre, le processus Wininit démarre le SCM plus tôt que prévu et commence une série de tâches d'initialisation.
Pendant le processus de démarrage, le SCM lit d’abord les informations sur le service à partir du registre. Cela implique deux entrées de registre clés :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\List - Contient les noms et l'ordre de démarrage des groupes de services. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services - la base de données réelle des services et des pilotes de périphériques. Ces informations aident le SCM à déterminer l’ordre de démarrage de chaque service et leurs interdépendances. Le SCM vérifie également si les pilotes de périphériques qui doivent être démarrés pendant le processus de démarrage sont correctement chargés et stocke les pilotes ayant échoué dans une liste appelée ScFailedDrivers.
Une fois tous les services de démarrage automatique non différé traités, SCM commence à charger les services de démarrage automatique différé, qui est une nouvelle fonctionnalité introduite depuis Windows Vista pour accélérer le démarrage du système. En règle générale, ces services différés sont initialisés environ 120 secondes après le démarrage du système.Lors du traitement de chaque service démarré automatiquement, SCM prendra également en compte les dépendances de l'ordre de chargement pour éviter l'apparition de dépendances circulaires.
Pour chaque service à démarrer, le SCM appelle la fonction ScStartService() pour vérifier que le compte sous lequel son processus s'exécute correspond au compte spécifié par le service. Au cours de ce processus, si le service n'est pas exécuté sous le compte système, le SCM appellera la fonction LSASS LogonUserEx() pour obtenir les informations de connexion utilisateur nécessaires. Ces informations sont stockées dans la clé de registre HKLM\SECURITY\Policy\Secrets\, et seuls les services disposant d'un accès complet peuvent obtenir ces mots de passe « secrets ».
Le processus de service est placé dans un état suspendu lors de sa création et son exécution ne reprendra pas tant que la connexion au pipeline ne sera pas établie.
Une fois le processus de service démarré avec succès, le SCM établira un canal de communication avec le processus de service en créant un canal nommé. Le processus de service rejoint ce canal en appelant la fonction StartServiceCtrlDispatcher(), et le SCM envoie ensuite une commande « start » au service.
L’existence d’un service de démarrage automatique différé améliore considérablement l’équilibre du démarrage du système. Bien que ces services ne soient techniquement pas très différents des services de démarrage automatique normaux, ils sont conçus pour être initialisés à différentes étapes du démarrage du système afin de garantir un fonctionnement fluide du système.
Le SCM gère également les pilotes de périphériques. Les types de services de ces services sont marqués comme SERVICE_KERNEL_DRIVER ou SERVICE_FILE_SYSTEM_DRIVER dans le registre. Dans ces cas, le SCM appelle la fonction ScLoadDeviceDriver() pour charger le pilote correspondant dans le système, ce qui nécessite généralement l'appel système NtLoadDriver.
Le SCM peut également envoyer des messages aux applications GUI telles que l'Explorateur Windows pour les informer des modifications apportées aux connexions aux lettres de lecteur réseau.
En bref, le gestionnaire de contrôle des services du système Windows joue un rôle indispensable dans le processus de démarrage du système. Il charge les services et les pilotes de périphériques nécessaires de manière efficace pour maintenir la réactivité rapide et le fonctionnement stable de l'ensemble du système. Lorsque nous utilisons ces technologies, avons-nous pris en compte les principes de fonctionnement et les défis techniques qui les sous-tendent ?