Les services Windows
Posted: Sun Jan 18, 2026 8:42 pm
# Les services Windows
Aujourd’hui on va voir **un pilier du système Windows** :
**les services**.
Les services sont partout :
* antivirus
* drivers user-mode
* agents de sécurité
* mises à jour
* supervision
Pourtant, beaucoup de développeurs ne savent pas vraiment **ce qu’est un service**, ni comment Windows les gère.
Ici on va voir **ce qu’est un service**, comment il fonctionne, et comment l’utiliser proprement en Win32.
---
# 1) C’est quoi un service Windows
Un **service Windows** est un **processus spécial** géré par le système.
Il se distingue d’un programme classique car :
* il peut démarrer sans utilisateur connecté
* il est géré par le système
* il s’exécute en arrière-plan
* son cycle de vie est contrôlé
Un service est conçu pour :
* tourner longtemps
* être stable
* fournir une fonctionnalité système
---
# 2) Services vs applications classiques
Une application classique :
* est lancée par un utilisateur
* s’arrête quand l’utilisateur ferme la session
* possède une interface
Un service :
* est lancé par le système
* peut tourner sans session utilisateur
* n’a pas d’interface graphique
* continue après un logoff
---
# 3) Le Service Control Manager (SCM)
Les services sont gérés par un composant central :
**le Service Control Manager (SCM)**.
Le SCM :
* démarre les services
* les arrête
* les surveille
* applique les droits
Tous les services passent obligatoirement par lui.
---
# 4) Ouvrir le Service Control Manager
Pour interagir avec les services, il faut ouvrir le SCM :
Important :
* le SCM est protégé
* nécessite souvent des droits admin
---
# 5) Créer un service
Créer un service se fait avec :
À savoir :
* le binaire est un EXE classique
* le type définit comment il s’exécute
---
# 6) Démarrer et arrêter un service
Démarrer un service :
Arrêter un service :
---
# 7) Le cycle de vie d’un service
Un service possède des états :
* SERVICE_START_PENDING
* SERVICE_RUNNING
* SERVICE_STOP_PENDING
* SERVICE_STOPPED
Le service doit **notifier le SCM** à chaque changement.
---
# 8) Point d’entrée d’un service
Un service ne démarre pas dans main.
Il démarre via :
Cela connecte le service au SCM.
---
# 9) ServiceMain
Le SCM appelle :
C’est ici que :
* le service s’initialise
* les threads sont créés
* le travail commence
---
# 10) Gérer les commandes du service
Le service doit enregistrer un handler :
Il reçoit :
* STOP
* PAUSE
* CONTINUE
* SHUTDOWN
---
# 11) Le compte du service
Un service s’exécute sous un compte :
* LocalSystem
* LocalService
* NetworkService
* ou un compte utilisateur
Le compte détermine :
* les droits
* l’accès réseau
* la sécurité
---
# 12) Services et tokens
Chaque service possède un **token de sécurité**.
Ce token détermine :
* ce que le service peut faire
* les ressources accessibles
Les services sont étroitement liés aux tokens.
---
# 13) Erreurs classiques
* vouloir afficher une UI
* bloquer ServiceMain
* ne pas notifier le SCM
* oublier CloseServiceHandle
* mal choisir le compte
---
# À retenir
Un service est un processus géré par Windows.
Il démarre via le SCM.
Il n’a pas d’interface graphique.
Il possède un cycle de vie strict.
La sécurité passe par le token.
Comprendre les services, c’est comprendre **comment Windows exécute du code en permanence**.
Aujourd’hui on va voir **un pilier du système Windows** :
**les services**.
Les services sont partout :
* antivirus
* drivers user-mode
* agents de sécurité
* mises à jour
* supervision
Pourtant, beaucoup de développeurs ne savent pas vraiment **ce qu’est un service**, ni comment Windows les gère.
Ici on va voir **ce qu’est un service**, comment il fonctionne, et comment l’utiliser proprement en Win32.
---
# 1) C’est quoi un service Windows
Un **service Windows** est un **processus spécial** géré par le système.
Il se distingue d’un programme classique car :
* il peut démarrer sans utilisateur connecté
* il est géré par le système
* il s’exécute en arrière-plan
* son cycle de vie est contrôlé
Un service est conçu pour :
* tourner longtemps
* être stable
* fournir une fonctionnalité système
---
# 2) Services vs applications classiques
Une application classique :
* est lancée par un utilisateur
* s’arrête quand l’utilisateur ferme la session
* possède une interface
Un service :
* est lancé par le système
* peut tourner sans session utilisateur
* n’a pas d’interface graphique
* continue après un logoff
---
# 3) Le Service Control Manager (SCM)
Les services sont gérés par un composant central :
**le Service Control Manager (SCM)**.
Le SCM :
* démarre les services
* les arrête
* les surveille
* applique les droits
Tous les services passent obligatoirement par lui.
---
# 4) Ouvrir le Service Control Manager
Pour interagir avec les services, il faut ouvrir le SCM :
Code: Select all
SC_HANDLE hSCM = OpenSCManagerW(
NULL,
NULL,
SC_MANAGER_ALL_ACCESS
);
* le SCM est protégé
* nécessite souvent des droits admin
---
# 5) Créer un service
Créer un service se fait avec :
Code: Select all
SC_HANDLE hService = CreateServiceW(
hSCM,
L"MyService",
L"My Service",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
L"C:\Path\service.exe",
NULL,
NULL,
NULL,
NULL,
NULL
);
* le binaire est un EXE classique
* le type définit comment il s’exécute
---
# 6) Démarrer et arrêter un service
Démarrer un service :
Code: Select all
StartServiceW(hService, 0, NULL);
Code: Select all
SERVICE_STATUS status;
ControlService(
hService,
SERVICE_CONTROL_STOP,
&status
);
# 7) Le cycle de vie d’un service
Un service possède des états :
* SERVICE_START_PENDING
* SERVICE_RUNNING
* SERVICE_STOP_PENDING
* SERVICE_STOPPED
Le service doit **notifier le SCM** à chaque changement.
---
# 8) Point d’entrée d’un service
Un service ne démarre pas dans main.
Il démarre via :
Code: Select all
StartServiceCtrlDispatcherW(serviceTable);
---
# 9) ServiceMain
Le SCM appelle :
Code: Select all
void WINAPI ServiceMain(
DWORD argc,
LPWSTR *argv
);
* le service s’initialise
* les threads sont créés
* le travail commence
---
# 10) Gérer les commandes du service
Le service doit enregistrer un handler :
Code: Select all
RegisterServiceCtrlHandlerW(
L"MyService",
ServiceCtrlHandler
);
* STOP
* PAUSE
* CONTINUE
* SHUTDOWN
---
# 11) Le compte du service
Un service s’exécute sous un compte :
* LocalSystem
* LocalService
* NetworkService
* ou un compte utilisateur
Le compte détermine :
* les droits
* l’accès réseau
* la sécurité
---
# 12) Services et tokens
Chaque service possède un **token de sécurité**.
Ce token détermine :
* ce que le service peut faire
* les ressources accessibles
Les services sont étroitement liés aux tokens.
---
# 13) Erreurs classiques
* vouloir afficher une UI
* bloquer ServiceMain
* ne pas notifier le SCM
* oublier CloseServiceHandle
* mal choisir le compte
---
# À retenir
Un service est un processus géré par Windows.
Il démarre via le SCM.
Il n’a pas d’interface graphique.
Il possède un cycle de vie strict.
La sécurité passe par le token.
Comprendre les services, c’est comprendre **comment Windows exécute du code en permanence**.