Virtualisation du registre

La virtualisation de registre est une technologie de compatibilité des applications qui permet de rediriger les opérations d’écriture de registre ayant un impact global vers des emplacements par utilisateur. Cette redirection est transparente pour les applications qui lisent ou écrivent dans le Registre. Il est pris en charge à partir de Windows Vista.

Cette forme de virtualisation est une technologie de compatibilité des applications intermédiaire ; Microsoft a l’intention de le supprimer des futures versions du système d’exploitation Windows, car d’autres applications sont compatibles avec Windows Vista et les versions ultérieures de Windows. Par conséquent, il est important que votre application ne devienne pas dépendante du comportement de la virtualisation de Registre dans le système.

La virtualisation est destinée uniquement à assurer la compatibilité pour les applications existantes. Les applications conçues pour Windows Vista et les versions ultérieures de Windows ne doivent pas écrire dans des zones système sensibles, ni s’appuyer sur la virtualisation pour résoudre les problèmes. Lors de la mise à jour du code existant pour qu’il s’exécute sur Windows Vista et les versions ultérieures de Windows, les développeurs doivent s’assurer que les applications stockent uniquement les données à des emplacements par utilisateur ou à des emplacements d’ordinateur dans %alluserprofile% qui utilisent correctement une liste de contrôle d’accès (ACL).

Pour plus d’informations sur la création d’applications conformes aux UAC, consultez le Guide du développeur UAC.

Vue d’ensemble de la virtualisation

Avant Windows Vista, les applications étaient généralement exécutées par les administrateurs. Par conséquent, les applications peuvent accéder librement aux fichiers système et aux clés de Registre. Si ces applications étaient exécutées par un utilisateur standard, elles échoueraient en raison de droits d’accès insuffisants. Windows Vista et les versions ultérieures de Windows améliorent la compatibilité des applications pour ces applications en redirigeant automatiquement ces opérations. Par exemple, les opérations de Registre vers le magasin global (HKEY_LOCAL_MACHINE\Software) sont redirigées vers un emplacement par utilisateur dans le profil de l’utilisateur appelé magasin virtuel (HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software).

La virtualisation du Registre peut être classifiée dans les types suivants :

Ouvrir la virtualisation du registre

Si l’appelant n’a pas d’accès en écriture à une clé et tente d’ouvrir la clé, la clé est ouverte avec l’accès maximal autorisé pour cet appelant.

Si l’indicateur REG_KEY_DONT_SILENT_FAIL est défini pour la clé, l’opération échoue et la clé n’est pas ouverte. Pour plus d’informations, consultez « Contrôle de la virtualisation du registre » plus loin dans cette rubrique.

Écrire la virtualisation du registre

Si l’appelant n’a pas d’accès en écriture à une clé et tente d’y écrire une valeur ou de créer une sous-clé, la valeur est écrite dans le magasin virtuel.

Par exemple, si un utilisateur limité tente d’écrire une valeur dans la clé suivante : HKEY_LOCAL_MACHINE\Software\AppKey1, la virtualisation redirige l’opération d’écriture vers HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\AppKey1.

Lire la virtualisation du registre

Si l’appelant lit à partir d’une clé virtualisée, le Registre présente une vue fusionnée des valeurs virtualisées (à partir du magasin virtuel) et des valeurs non virtuelles (du magasin global) à l’appelant.

Par exemple, supposons \HKEY_LOCAL_MACHINE\SoftwareAppKey1 contient deux valeurs V1 et V2 et qu’un utilisateur limité écrit une valeur V3 dans la clé. Lorsque l’utilisateur tente de lire des valeurs à partir de cette clé, la vue fusionnée inclut les valeurs V1 et V2 du magasin global et la valeur V3 du magasin virtuel.

Notez que les valeurs virtuelles sont prioritaires sur les valeurs globales lorsqu’elles sont présentes. Dans l’exemple ci-dessus, même si le magasin global avait la valeur V3 sous cette clé, la valeur V3 est toujours retournée à l’appelant à partir du magasin virtuel. Si V3 devait être supprimé du magasin virtuel, V3 serait retourné à partir du magasin global. En d’autres termes, si V3 devait être supprimé de HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\AppKey1 mais HKEY_LOCAL_MACHINE\Software\AppKey1 avait une valeur V3, cette valeur serait retournée à partir du magasin global.

Étendue de la virtualisation du registre

La virtualisation du Registre est activée uniquement pour les éléments suivants :

  • Processus interactifs 32 bits.
  • Clés dans HKEY_LOCAL_MACHINE\Software.
  • Clés qu’un administrateur peut écrire. (Si un administrateur ne peut pas écrire sur une clé, l’application aurait échoué sur les versions précédentes de Windows, même si elle a été exécutée par un administrateur.)

La virtualisation du Registre est désactivée pour les éléments suivants :

  • Processus 64 bits.

  • Processus qui ne sont pas interactifs, tels que les services.

    Notez que l’utilisation du Registre en tant que mécanisme de communication interprocessus (IPC) entre un service (ou tout autre processus pour lequel la virtualisation n’est pas activée) et une application ne fonctionnera pas correctement si la clé est virtualisée. Par instance, si un service antivirus met à jour ses fichiers de signature en fonction d’une valeur définie par une application, le service ne met jamais à jour ses fichiers de signature, car le service lit à partir du magasin global, mais l’application écrit dans le magasin virtuel.

  • Processus qui empruntent l’identité d’un utilisateur. Si un processus tente une opération lors de l’emprunt d’identité d’un utilisateur, cette opération ne sera pas virtualisée.

  • Processus en mode noyau, tels que les pilotes.

  • Processus qui ont requestedExecutionLevel spécifié dans leurs manifestes.

  • Clés et sous-clés de HKEY_LOCAL_MACHINE\Software\Classes, HKEY_LOCAL_MACHINE\Software\Microsoft\Windowset HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT.

Contrôle de la virtualisation du registre

En plus de contrôler la virtualisation au niveau de l’application à l’aide de requestedExecutionLevel dans le manifeste, un administrateur peut activer ou désactiver la virtualisation par clé pour les clés dans HKEY_LOCAL_MACHINE\Software. Pour ce faire, utilisez l’option flags de l’utilitaire de ligne de commande Reg.exe avec les indicateurs répertoriés dans le tableau suivant.

Indicateur Signification
REG_KEY_DONT_SILENT_FAIL Cet indicateur désactive la virtualisation du Registre ouvert. Si cet indicateur est défini et qu’une opération d’ouverture échoue sur une clé pour laquelle la virtualisation est activée, le Registre ne tente pas de rouvrir la clé. Si cet indicateur est clair, le Registre tente de rouvrir la clé avec MAXIMUM_ALLOWED accès au lieu de l’accès demandé.
REG_KEY_DONT_VIRTUALIZE Cet indicateur désactive la virtualisation du Registre en écriture. Si cet indicateur est défini et qu’une opération de création de clé ou de valeur de définition échoue, car l’appelant ne dispose pas d’un droit d’accès suffisant à la clé parente, le Registre échoue à l’opération. Si cet indicateur est clair, le Registre tente d’écrire la clé ou la valeur dans le magasin virtuel. L’appelant doit avoir le KEY_READ droit sur la clé parente.
REG_KEY_RECURSE_FLAG Si cet indicateur est défini, les indicateurs de virtualisation du Registre sont propagés à partir de la clé parente. Si cet indicateur est clair, les indicateurs de virtualisation du Registre ne sont pas propagés. La modification de cet indicateur affecte uniquement les nouvelles clés descendantes créées après la modification de l’indicateur. Il ne définit pas ou n’efface pas ces indicateurs pour les clés descendantes existantes.

 

L’exemple suivant illustre l’utilisation de l’utilitaire de ligne de commande Reg.exe avec l’option FLAGS pour interroger l’état des indicateurs de virtualisation d’une clé.

C:\>reg flags HKLM\Software\AppKey1 QUERY

HKEY_LOCAL_MACHINE\Software\AppKey1

        REG_KEY_DONT_VIRTUALIZE: CLEAR
        REG_KEY_DONT_SILENT_FAIL: CLEAR
        REG_KEY_RECURSE_FLAG: CLEAR

The operation completed successfully.

Chaque fois que l’audit est activé sur une clé en cours de virtualisation, un nouvel événement d’audit de virtualisation est généré pour indiquer que la clé est en cours de virtualisation (en plus des événements d’audit habituels). Les administrateurs peuvent utiliser ces informations pour surveiller la status de la virtualisation sur leurs systèmes.

Prise en main avec le contrôle de compte d’utilisateur

Présentation et configuration du contrôle de compte d’utilisateur

Meilleures pratiques et recommandations pour les développeurs pour les applications dans un environnement avec privilèges minimum