Les services Windows

Développement système natif en c/c++ avec win32 ...

Moderator: Rick

Post Reply
Hydraxx
Site Admin
Posts: 19
Joined: Mon Jan 12, 2026 4:04 pm
Location: France
Contact:

Les services Windows

Post by Hydraxx »

# 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 :

Code: Select all

SC_HANDLE hSCM = OpenSCManagerW(
NULL,
NULL,
SC_MANAGER_ALL_ACCESS
);
Important :

* 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
);
À 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 :

Code: Select all

StartServiceW(hService, 0, NULL);
Arrêter un service :

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);
Cela connecte le service au SCM.

---

# 9) ServiceMain

Le SCM appelle :

Code: Select all

void WINAPI ServiceMain(
DWORD argc,
LPWSTR *argv
);
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 :

Code: Select all

RegisterServiceCtrlHandlerW(
L"MyService",
ServiceCtrlHandler
);
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**.

Who is online

Users browsing this forum: No registered users and 1 guest