1) Comment l'activer et le désactiver
-
Cliquez sur le bouton Démarrer
, tapez gpedit.msc dans la zone de recherche, puis appuyez sur la touche Entrée.
Si vous êtes invité à fournir un mot de passe administrateur ou une confirmation, fournissez le mot de passe ou la confirmation.
-
Sous Configuration ordinateur, cliquez sur la flèche en regard de Modèles d’administration, puis cliquez sur la flèche en regard de Système.
-
Cliquez sur le dossier Ouverture de session.
-
Double-cliquez sur Masquer les points d’entrée pour le changement rapide d’utilisateur, cliquez sur Activé, puis sur OK.
2) Le point de vue du développeur WIN32
Un application peut avoir besoin de prendre en charge le changement rapide d'utilisateur. un article de Microsoft explique comment il faut faire (il existe même en français).
3) Le point de vue de l'administrateur
En tant qu'administrateur on peut se demander comment surveiller le changement rapide d'utilisateur. J'ai trouvée la réponse dans un article qui liste un ensemble d'évènements intéressants pour l'administrateur. Voici les deux évènements en question :
Event ID 4778 : Un utilisateur a accédé à sa session utilisant le changement d'utilisateur rapide.
Event ID 4779 : Un utilisateur a quitté sa session en utilisant le changement d'utilisateur rapide.
Seulement, ces évènements n'apparraissent dans le journal de sécurité que si la stratégie d'audit est activée pour les évènements d'audit de connexion. Comme le montre l'image suivante :

Des lors, à chaque usage du changement rapide d'utilisateur le filtrage des évènements 4778 et 4779 donne quelque chose qui ressemble à cela :

Il est alors possible de récupérer simplement ces évènement en PowerShell.
clear-Host
$UserProperty = @{n="User";e={$_.ReplacementStrings[0]}}
$TypeProperty = @{n="Action";e={switch($_.EventID) {4778 {"SwitchOn"} 4779{"SwitchOff"}}}}
$TimeProeprty = @{n="Time";e={$_.TimeGenerated}}
Get-EventLog -LogName Security -Source Microsoft-Windows-security-auditing | where {$_.EventID -eq 4778 -or $_.EventID -eq 4779} | select $UserProperty,$TypeProperty,$TimeProeprty
4) Le point de vue du scripteur PowerShell (programmeur .NET)
En .NET il est possible de s'abonner aux évènements système.
PS> $sysevent = [microsoft.win32.systemevents]
PS> $sysevent
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False SystemEvents System.Object
PS> Register-ObjectEvent -InputObject $sysevent -EventName "SessionSwitch" -Action {[console]::Beep()}
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 fa48b95f-299... NotStarted False [console]::Beep()
Il est possibe de trouver la liste complète des évènements sur le site de Micosoft.
DisplaySettingsChanged Occurs when the user changes the display settings.
DisplaySettingsChanging Occurs when the display settings are changing.
EventsThreadShutdown Occurs before the thread that listens for system events is terminated.
InstalledFontsChanged Occurs when the user adds fonts to or removes fonts from the system.
LowMemory Occurs when the system is running out of available RAM.
PaletteChanged Occurs when the user switches to an application that uses a different palette.
PowerModeChanged Occurs when the user suspends or resumes the system.
SessionEnded Occurs when the user is logging off or shutting down the system.
SessionEnding Occurs when the user is trying to log off or shut down the system.
SessionSwitch Occurs when the currently logged-in user has changed.
TimeChanged Occurs when the user changes the time on the system clock.
TimerElapsed Occurs when a windows timer interval has expired.
UserPreferenceChanged Occurs when a user preference has changed.
UserPreferenceChanging Occurs when a user preference is changing.
Pour le désenregistrement c'est :
PS> Unregister-Event -SubscriptionId 1