Filtrage des opérations de registre sur les ruches d’application

Les applications en mode utilisateur utilisent des ruches d’application dans le Registre pour stocker des données d’état spécifiques à l’application.

Un pilote de filtre de Registre reçoit des appels à sa routine RegistryCallback pour les opérations de Registre sur les ruches d’application. Ces appels ne font pas de distinction entre les opérations de Registre sur les ruches d’application et les opérations sur d’autres types de ruches de Registre.

Pour charger une ruche d’application, une application appelle RegLoadAppKey.

Les ruches d’application sont chargées sous \\REGISTRY\\A au lieu de sous \\REGISTRY\\MACHINE ou \\REGISTRY\\USER.

Notez qu’il n’existe aucun moyen de parcourir \\REGISTRY\\A. Une tentative d’ouverture d’une clé sous \REGISTRY\A échoue avec une erreur status STATUS_ACCESS_DENIED.

Pour accéder à une clé dans une ruche d’application, une application utilise le handle qu’elle reçoit lorsqu’elle appelle RegLoadAppKey.

Le système d’exploitation décharge automatiquement la ruche de l’application une fois tous les handles de la ruche fermés.

Contrairement aux autres types de ruches de registre, pour lesquelles chaque clé est sécurisée avec son propre descripteur de sécurité, la sécurité d’une ruche d’application est basée sur le descripteur de sécurité du fichier hive. Cela signifie que :

  • Une tentative de définition d’un descripteur de sécurité sur une clé individuelle dans une ruche d’application échoue avec une erreur status STATUS_ACCESS_DENIED.
  • Une entité qui réussit à charger la ruche peut modifier la ruche entière.

Les pilotes de filtre de Registre qui gèrent les opérations de clé de création et de clé ouverte (qui sont indiquées par les valeurs de notification RegNtPreOpenKey, RegNtPreOpenKeyEx, RegNtPreCreateKey et RegNtPreCreateKeyEx) doivent veiller à ne pas utiliser de chemin d’accès absolu (qui commence par \\REGISTRY\\A\\) pour ouvrir une ruche d’application ; seul le gestionnaire du Registre peut le faire. Si un pilote de filtre de Registre tente d’ouvrir une ruche d’application de cette façon (par exemple, en appelant la routine ZwOpenKey), l’opération échoue avec une erreur status STATUS_ACCESS_DENIED.

La chaîne de nom de chemin d’accès absolu apparaît dans le membre CompleteName de la structure REG_CREATE_KEY_INFORMATION, REG_CREATE_KEY_INFORMATION_V1, REG_OPEN_KEY_INFORMATION ou REG_OPEN_KEY_INFORMATION_V1 .