Application d’une lecture sécurisée pour une collection HID
Cet article décrit comment une application en mode utilisateur ou un pilote en mode noyau peut appliquer une lecture sécurisée pour une collection HID de niveau supérieur.
Si une lecture sécurisée est activée pour une collection, seuls les clients « approuvés » (ceux disposant de privilèges SeTcbPrivilege) peuvent obtenir une entrée à partir d’un fichier ouvert d’une collection. Les pilotes en mode noyau ont des privilèges SeTcbPrivilege par défaut, mais les applications en mode utilisateur ne le font pas. Pour plus d’informations sur l’obtention de privilèges système en mode utilisateur, consultez les informations sur l’autorisation dans la documentation du Kit de développement logiciel (SDK) Microsoft Windows.
Ce mécanisme est fourni principalement afin que les composants système en mode utilisateur « approuvés » puissent empêcher les applications en mode utilisateur sans privilèges SeTcbPrivilege d’obtenir une entrée à partir d’un regroupement pendant les opérations système critiques. Par exemple, un composant système en mode utilisateur « approuvé » peut empêcher une application en mode utilisateur sans privilèges SeTcbPrivilege d’obtenir des informations confidentielles qu’un utilisateur fournit pendant une opération d’ouverture de session.
Les clients « approuvés » utilisent des requêtes IOCTL_HID_ENABLE_SECURE_READ et IOCTL_HID_DISABLE_SECURE_READ pour activer et désactiver une lecture sécurisée pour une collection. Si un client sans privilèges SeTcbPrivilege utilise ces requêtes, la requête ne modifie pas l’état de lecture sécurisé d’une collection et le pilote de classe HID retourne une valeur d’état de STATUS_PRIVILEGE_NOT_HELD.
L’activation et la désactivation d’une lecture sécurisée pour une collection fonctionne de la manière suivante :
Le pilote de classe HID gère un nombre de lectures sécurisé spécifique au fichier pour chaque fichier ouvert d’une collection. Le pilote de classe HID conserve également un nombre de lectures sécurisé pour la collection, qui correspond à la somme des nombres de lectures sécurisés spécifiques au fichier. Le nombre de lectures sécurisé pour la collection est initialisé à zéro lors de la création de la collection, et un nombre de lectures sécurisé pour un fichier est initialisé à zéro lorsqu’un fichier est ouvert.
Lorsque le pilote de classe HID reçoit une demande d’activation pour un fichier, il incrémente de 1 le nombre de lectures sécurisés pour le fichier (et incrémente de 1 le nombre de lectures sécurisé pour la collection).
Lorsque le pilote de classe HID reçoit une demande de désactivation pour un fichier :
- Si le nombre de lectures sécurisé pour le fichier est supérieur à zéro, le pilote décrémente de 1 le nombre de lectures sécurisé pour le fichier (et décrémente par 1 le nombre de lectures sécurisé pour la collection).
- Si le nombre de lectures sécurisé pour le fichier est égal à zéro, le pilote ne modifie pas le nombre de lectures sécurisés.
Si le nombre de lectures sécurisé pour une collection est supérieur à zéro, le pilote de classe HID applique une lecture sécurisée pour la collection. Sinon, le pilote n’applique pas de lecture sécurisée pour la collection.
Un client doit utiliser une demande de désactivation pour annuler une demande d’activation correspondante. Toutefois, si le client ne le fait pas, le pilote de classe HID décrémente correctement le nombre de lectures sécurisé pour une collection lorsqu’il traite une demande de IRP_MJ_CLOSE pour un fichier. Lorsque le pilote traite la demande de fermeture, il décrémente le nombre de lectures sécurisé pour la collection par le nombre de lectures sécurisé pour le fichier en cours de fermeture.