Un "Named Pipe" est un mécanisme de **Communication Inter-Processus (IPC)**. Il permet à un processus (le "serveur") de créer un point de communication et à un ou plusieurs autres processus (les "clients") de s'y connecter pour échanger des données.
La grande différence avec les "canaux anonymes" (anonymous pipes), c'est que les canaux **nommés** :
1. **Ont un nom**, ce qui permet à des processus non-liés (qui ne sont pas parent/enfant) de se trouver et de communiquer.
2. Peuvent être utilisés pour la communication **sur un réseau**, pas seulement sur la même machine.
### 2. Les Caractéristiques Clés (Plus en détail)
Pour bien comprendre leur fonctionnement, voici leurs propriétés principales :
- **Nommage :** Un canal nommé a un nom qui suit une convention stricte : `\\.\pipe\NomDeMonCanal`.
- `\\.` indique que l'objet se trouve sur la machine locale.
- `\pipe\` est le "dossier" spécial du système de fichiers virtuel où résident les canaux nommés (le _Named Pipe File System_ ou NPFS).
- Pour accéder à un canal sur une machine distante, on utilise `\\NomMachineDistante\pipe\NomDuCanal`. C'est cette capacité qui est exploitée pour le mouvement latéral.
- **Modèle Client/Serveur :**
- **Le serveur :** Un processus crée le canal nommé et attend qu'un client se connecte. Il est "à l'écoute".
- **Le client :** Un autre processus se connecte au canal en utilisant son nom. Une fois la connexion établie, la communication peut commencer.
- **Type de Communication :**
- **Bidirectionnelle (Duplex) :** C'est le mode le plus courant. Les données peuvent circuler dans les deux sens, comme une conversation téléphonique.
- **Unidirectionnelle (Simplex) :** Les données ne vont que dans un sens (serveur -> client ou client -> serveur).
- **Comportement de Fichier :** Pour un développeur, manipuler un canal nommé ressemble beaucoup à manipuler un fichier. On utilise des fonctions comme `CreateFile` pour se connecter (côté client) ou `CreateNamedPipe` pour créer (côté serveur), puis `ReadFile` et `WriteFile` pour échanger des données. Cette abstraction est très puissante.
- **Sécurité :** C'est un point crucial pour vous. Comme les fichiers, les canaux nommés possèdent un **Descripteur de Sécurité (Security Descriptor)**. Celui-ci définit qui a le droit de se connecter au canal, d'y lire ou d'y écrire des données, via des **listes de contrôle d'accès (ACLs)**. Une mauvaise configuration de ces ACLs peut entraîner de graves failles de sécurité.