Fermer une session après un délai donné.

Description

Permet de fermer une session dès qu'une durée de connection totale par jour fixée à l'avance est écoulée.
Déjà fait, mais utilise un service fournit par winlogon (clé notify) permettant de suivre l'ouverture/la fermeture de session.
Une amélioration permet de spécifier un intervalle de temps (heure de début, heure de fin) où la connection est autorisée.

Crée avec le Win SDK, et le vc tookit 2003.

Pour l'installer, il faut d'abord le compiler.
Pour le compiler:
mettre à jour correctement le fichier vcvars32.bat avec vos propres chemins vers les librairies du win sdk et du vc toolkit.
exécuter init.bat
lancer make.bat (compile tout) ou "make.bat allex" (compile l'amélioration)
lancer install.exe ('install uninstall' pour désinstaller) ou installex.exe
Ce programme crée une sous-clé de la clé notify de winlogon dans le registre pour permettre le chargement d'une dll de suivi de l'ouverture et de la fermeture de session (voir http://msdn.microsoft.com/library/en-us/secauthn/security/winlogon_notification_packages.asp).
lancer copyall.bat
Ce batch copie une dll et deux exécutables dans c:\windows\system32. usertime.dll et usertimeprocess.exe sont utilisés pour suivre les ouvertures de session et agir en conséquence. usertimeparam.exe permet de les configurer en ligne de commande.
Les options de configurations sont conservés dans la base de registre dans HKLM\Software\julien moquet auquel l'utilisateur System doit-avoir l'accès total (droit par défaut normalement).
Il est nécessaire de redémarrer pour prendre en charge la dll.
De meme, la désinstallation doit se faire en deux temps:
d'abord supprimer les informations de registre (commande 'install uninstall' ou 'installex uninstall')
redémarrer
puis supprimer les fichiers (removeall.bat)

Explication du fonctionnement:
Le processus winlogon peut informer des dll préalablement répertoriés dans sa clé notify d'évènement le concernant. Pour cela, les dll exportent des méthodes que winlogon peut utiliser, et celles-ci sont consignées dans une sous-clé de la clé notify, avec d'autres paramètres.
Ici, deux méthodes sont exportées correspondant aux évènements d'ouverture de session et de fermeture de session. La méthode de la dll (usertime.dll) suivant l'ouverture de session commence par vérifier le droit d'accès à l'utilisateur, puis lance un processus qui vérifie régulièrement que le temps total imparti n'est pas écoulé (ou qu'il ne sort pas de l'intervalle de connection valide avec l'amélioration). Tandis que la méthode qui gère la fermeture de session met à jour le temps de connection restant pour la journée.

"Difficultés" :
La mise en oeuvre de la dll, qui pour être testée nécessite systématiquement le redémarrage du poste (après chaque modification), voir deux redémarrage sans jongler avec deux dll jumelles. (notamment les méthodes WLEventLogon et WLEventLogoff de la source usertime.cpp).
Le processus à lancer dans la dll, n'hérite apparement pas des droits de l'utilisateur SYSTEM, il faut récupérer le token du processus courant et l'utiliser pour créer le nouveau processus. (voir la méthode LaunchCounterProcess de la source usertime.cpp).
La fermeture de session ne fonctionne pas lorsque certains programmes (problème rencontré avec des jeux en mode protégé plein écran mais ce n'est pas l'exacte condition) sont en activité et avec l'option FORCEIFHUNG de ExitWindowsEx. Cela fonctionne pourtant avec des logiciels (plus) simples. L'utilisation de l'option FORCE tout court semble corriger le problème (pour l'usage que j'en ai). (voir la méthode ExitSession de la source usertime.cpp).

Conclusion :


Dans la première version, il subsiste la clé HKLM\software\julien moquet et ses sous-clés suite à la désinstallation.
L'utilisateur n'est pas prévenu de l'imminence de la fermeture de la session... la source WINTIMER V.2 [DEV-C++ 4] (sur le site) propose d'emettre des bips, ce n'est pas bête.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.