# Winlogon

Winlogon est un composant de Windows qui gère l'ouverture et la fermeture de session, et le Control-Alt-Suppr. En particulier :
* il charge le profil d'un utilisateur après son authentification ;
* il gère l'écran de veille ; sur le retour au mode normal, on peut paramétrer WinLogon pour obliger l'utilisateur à s'authentifier une nouvelle fois.
Les fonctionnalités d'authentification et d'identification sont faites via la bibliothèque logicielle GINA (Graphical Identification aNd Authorization). Winlogon gère les fonctions d'interface intermédiaire, qui sont indépendantes de la stratégie d'authentification.
Il implémente aussi les opérations de time-out.
Winlogon vérifie aussi la licence Windows.

## Vue d'ensemble

Winlogon gère les fonctions d'interface indépendantes de la stratégie d'authentification. Il crée les bureaux de la station Windows, implémente des opérations de temporisation et, dans les versions de Windows antérieures à Windows Vista , fournit un ensemble de fonctions de support pour GINA et assume la responsabilité de la configuration de la stratégie de groupe de la machine et de l'utilisateur.
Winlogon vérifie également si la copie de Windows est une licence légitime dans Windows XP et les versions ultérieures.
Winlogon a plusieurs responsabilités.
* Protection de poste de travail et de fenêtre
    Winlogon définit la protection de la station Windows et des postes de travail correspondants afin de s’assurer qu’ils sont correctement accessibles. En général, cela signifie que le système local aura un accès complet à ces objets et qu'un utilisateur connecté de manière interactive aura un accès en lecture à l'objet de station de fenêtre et un accès complet à l'objet de bureau de l'application.
* Reconnaissance SAS standard
    Winlogon dispose de points d'ancrage spéciaux sur le serveur User32 qui lui permettent de surveiller les événements de séquence d' alerte sécurisée (CAC) Control-Alt-Delete . Winlogon met ces informations d'événement SAS à la disposition des GINA, qui les utilisent comme SAS ou dans le cadre de leur SAS. En général, les GINA devraient surveiller eux-mêmes les SAS; Cependant, tout GINA ayant le standard Ctrl + Alt + Suppr SAS comme l'un des SAS qu'il reconnaît doit utiliser le support Winlogon fourni à cet effet.
* Envoi de routine SAS
    Lorsque Winlogon rencontre un événement SAS ou lorsqu'un SAS est livré à Winlogon par GINA, celui-ci définit l'état en conséquence, modifie le bureau Winlogon et appelle l'une des fonctions de traitement SAS de GINA.
* Chargement du profil utilisateur
    Lorsque les utilisateurs se connectent, leurs profils sont chargés dans le registre. De cette manière, les processus de l'utilisateur peuvent utiliser la clé de registre spéciale HKEY_CURRENT_USER. Winlogon le fait automatiquement après une connexion réussie, mais avant l'activation du shell pour l'utilisateur nouvellement connecté.
* Assignation de sécurité au shell utilisateur
    Lorsqu'un utilisateur ouvre une session, GINA est responsable de la création d'un ou plusieurs processus initiaux pour cet utilisateur. Winlogon fournit une fonction de support à GINA pour appliquer la sécurité du nouvel utilisateur connecté à ces processus. Cependant, la méthode recommandée consiste à appeler la fonction Windows CreateProcessAsUser de Windows et à laisser le système fournir le service.
* Contrôle de l'économiseur d'écran
    Winlogon surveille les activités du clavier et de la souris pour déterminer quand activer les écrans de veille. Une fois l’économiseur d’écran activé, Winlogon continue de surveiller l’activité du clavier et de la souris pour déterminer quand l’économiseur d’écran doit être arrêté. Si l'économiseur d'écran est marqué comme sécurisé, Winlogon considère le poste de travail comme verrouillé. En cas d'activité de la souris ou du clavier, Winlogon appelle la fonction WlxDisplayLockedNotice du GINA et le comportement du poste de travail verrouillé reprend. Si l'économiseur d'écran n'est pas sécurisé, toute activité du clavier ou de la souris met fin à l'économiseur d'écran sans notification à GINA.
* Prise en charge de plusieurs fournisseurs de réseau
    Plusieurs réseaux installés sur un système Windows peuvent être inclus dans le processus d'authentification et dans les opérations de mise à jour du mot de passe. Cette inclusion permet à des réseaux supplémentaires de collecter simultanément des informations d'identification et d'authentification lors d'une connexion normale, à l'aide du bureau sécurisé de Winlogon. Certains des paramètres requis dans les services Winlogon disponibles pour les GINA prennent explicitement en charge ces fournisseurs de réseau supplémentaires.

## Processus système critique

WinLogon est un des processus système critiques de windows, c'est-à-dire qu'il ne peut être arrêté. Les autres processus critiques sont :
* lsass.exe (sécurité locale) ;
* services (Windows Service Controller) ;
* smss.exe (Gestionnaire de session) ;
* csrss.exe (`Client/Server Runtime SubSystem).

## Procédure de démarrage de winlogon

Voir Processus de démarrage de Windows NT#Winlogon

## Ctrl-Alt-Suppr
### Ctrl-Alt-Suppr intercepté par WinLogon

WinLogon intercepte les Ctrl-Alt-Sup. Dans ce cas, il appelle les fonctions de traitement du SAS (Secure attention key) dans la bibliothèque GINA. Voir (en) en:Secure attention key

### Comparatif avec le ctrlaltsuppr de linux

Dans la configuration de la plupart des distributions linux, la frappe de Ctrl-Alt-Suppr provoque le reboot (shutdown -r) du système, à moins qu'une interface graphique soit active. Ceci est paramétré par une ligne du fichier inittab (ligne contenant la chaîne de caractères ctrlaltsuppr).
NB : dans le cas d'une interface graphique sous linux, le ctrlaltsuppr est dans la plupart des cas intercepté par des processus intermédiaires et ne provoque donc pas le reboot.

## Un WINLOGON.EXE pour chaque utilisateur connecté

S'il y a N utilisateurs qui ont ouvert une session, il y aura :
* un SEUL processus smss.exe (Session Manager SubSystem) ;
* N processus winlogon.exe ;
* N processus csrss.exe (Client/Server Runtime SubSystem).

### Chargement d'un profil utilisateur

Quand un utilisateur s'est connecté et authentifié, WinLogon charge son profil dans le registre ; cela permet aux processus de cet utilisateur d'utiliser la clé de registre HKEY_CURRENT_USER (plus exactement, toutes les données qui sont sous l'arborescence correspondante). WinLogon fait cela automatiquement après un login réussi et avant l'activation du shell de l'utilisateur.

### Fonction CreateProcessAsUser

Sur la connexion d'un utilisateur, WinLogon appelle une fonction de la bibliothèque GINA, qui elle-même appelle une fonction appelée CreateProcessAsUser. Ce comportement par défaut peut éventuellement être modifié pour des besoins spécifiques (sécurité ou autre).

## Le shell de Windows

Après qu'un utilisateur s'est authentifié, il travaille sous un shell graphique, en général Explorateur Windows (explorer.exe).
En fait, le shell utilisé est un paramètre de Winlogon ; à la place de l'explorateur Windows, on peut mettre par exemple LiteStep.
Ce paramètre de Winlogon est défini par l'entrée du registre HKey_Current_User\Software\Microsoft\Windows NT\CurrentVersion\Winlogon>Shell.

## Contrôle de l'écran de veille

Winlogon contrôle le clavier et la souris pour déterminer quand activer un écran de veille. Une fois que l'écran de veille est activé, il continue à contrôler le clavier et la souris pour arrêter l'écran de veille dès qu'il détecte une activité.
Si l'écran de veille est marqué comme sécurisé, WinLogon verrouillera la session en cours et refera une demande d'authentification via la fonction WlxDisplayLockedNotice .

## Écran d'identification sur la connexion d'un utilisateur
### Écran d'identification sur la connexion d'un utilisateur de Windows

La liste des utilisateurs qui apparaissent éventuellement dans l'écran d'identification est fonction du paramétrage de Winlogon.
Exemple : pour que l'utilisateur « Dupont » n'apparaisse pas dans cette liste, il faut créer un identifiant de la taille d'un double mot (type dword en anglais) nommée « Dupont » qui a pour valeur 0 dans HKey_Local_Machine\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList. Dans le cas particulier d'un utilisateur qui a été renommé, le nom de la valeur doit être le nom initial de l'utilisateur. Par exemple : « Dupont » dans le cas d'un M. Dupont ayant changé de patronyme pour « Dupond », il faudra créer un identifiant « Dupont » de type dword qui aura pour valeur 0 afin d'éviter qu'il apparaisse dans l'écran d'identification.
L'utilitaire regedit n'affichera la clé SpecialAccounts que si l'utilisateur a des droits suffisants, par exemple, s'il est membre du groupe des administrateurs.
L'affichage ou le non-affichage du dernier utilisateur connecté avec succès n'est pas un paramètre de Winlogon (paramètre Dontdisplaylastusername de HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Network)

### Comparatif avec l'écran d'identification de linux sur la connexion d'un utilisateur

Sous linux, les logiciels gdmlogin et kdm (pour KDE) font partie de ceux qui assurent une fonction analogue à celle de l'écran d'identification de WinLogon.
Le paramètre Dontdisplaylastusername de Microsoft Windows est analogue au paramètre DisplayLastLogin de gdmlogin.

## Autologon
### Autologon de Windows

Pour améliorer l'ergonomie (au détriment de la sécurité), il est possible de se connecter automatiquement sans que l'utilisateur soit obligé de s'authentifier. Le paramétrage se fait sous la clef de registre HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon. Cette clef est interrogée par le processus Winlogon.exe lorsqu'une ouverture de session est sollicitée.
Les valeurs chaînes suivantes sont nécessaires à un autlogon :
* AutoAdminLogon doit être égale à 1 (active l'autologon) ;
* DefaultUserName doit contenir le nom du compte utilisé ;
* DefaultPassword doit contenir le mot de passe du compte utilisé ;
* DefaultDomainName doit contenir le nom de domaine du compte utilisé.
Deux autres valeurs peuvent jouer un rôle :
* AutologonCount est une valeur DWORD qui contient le nombre d'ouverture de session automatique souhaité. Cette valeur se décrémente de 1 à chaque ouverture de session (les sessions TSE sont comptabilisées). Une fois arrivée à 0, le système repasse AutoAdminLogon à 0 et supprime la valeur DefaultPassword ;
* ForceAutoLogon est une valeur chaîne. Si elle est égale à 1, elle active l'autologon à la fermeture de session. Sans elle l'autologon n'est actif qu'au démarrage du système. Elle permet d'exécuter un LogOff/LogOn en automatique.

### Comparatif avec l'autologon de linux

L'autologon est aussi possible sous linux; par exemple, si on utilise l'interface GNOME, le paramètre s'appelle automaticLogonEnable (fichier de configuration : gdm.conf). Il est aussi possible d'utiliser gdmsetup.