Partager via


Obtention de données de Registre

Vous pouvez obtenir ou modifier des données de Registre à l’aide de la classe WMI StdRegProv et de ses méthodes. Lors de l’utilisation de l’utilitaire Regedit pour afficher et modifier les valeurs de Registre sur l’ordinateur local, StdRegProv vous permet d’utiliser un script ou une application pour automatiser ces activités sur l’ordinateur local et les ordinateurs distants.

StdRegProv contient des méthodes pour effectuer les opérations suivantes :

  • Vérifier les autorisations d’accès pour un utilisateur
  • Créer, énumérer et supprimer des clés de Registre
  • Créer, énumérer et supprimer des sous-clés ou des valeurs nommées
  • Lire, écrire et supprimer des valeurs de données

Les données du Registre sont organisées par sous-arborescences, clés et sous-clés imbriquées sous une clé de niveau supérieur. Les valeurs de données réelles sont appelées entrées ou valeurs nommées.

Les sous-arborescences incluent les éléments suivants :

  • HKEY_CLASSES_ROOT (abrégé en HKCR)
  • HKEY_CURRENT_USER (HKCU)
  • HKEY_LOCAL_MACHINE (HKLM)
  • HKEY_USERS
  • HKEY_CURRENT_CONFIG

Par exemple, dans l’entrée de Registre HKEY\SOFTWARE\Microsoft\DirectX\InstalledVersion, la sous-arborescence HKEY est SOFTWARE ; les sous-clés sont Microsoft et DirectX ; et l’entrée de valeur nommée est InstalledVersion.

Un RegistryKeyChangeEvent se produit lorsqu’une modification d’une clé spécifique se produit, mais l’entrée n’identifie pas comment les valeurs changent et cet événement ne sera pas déclenché par des modifications sous la clé spécifiée. Pour identifier les modifications n’importe où dans une structure de clé hiérarchique, utilisez RegistryTreeChangeEvent, qui ne retourne pas de valeurs spécifiques ni de modifications de clé qui se produisent. Pour obtenir une modification de valeur d’entrée spécifique, utilisez RegistryValueChangeEvent, puis lisez l’entrée pour obtenir une valeur de base.

StdRegProv possède uniquement des méthodes qui peuvent être appelées à partir de C++ ou de script, qui est différente de la structure de classe Win32.

L’exemple de code suivant montre comment utiliser la méthode StdRegProv.EnumKey pour répertorier toutes les sous-clés logicielles Microsoft sous la clé de Registre.

\HKEY_LOCAL_MACHINE SOFTWARE Microsoft\

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
Wscript.Echo subkey
    
Next

Remarque

VBScript est obsolète. Pour plus d’informations, consultez le billet de blog de dépréciation VBScript : Chronologies et étapes suivantes.


# The signature for EnumKey method of StdRegProv class:
#
# uint32 EnumKey(
#  [in]  uint32 hDefKey = HKEY_LOCAL_MACHINE,
#  [in]  string sSubKeyName,
#  [out] string sNames[]
# );

$arguments = @{
    hDefKey = [uint32]2147483650 # HKEY_LOCAL_MACHINE
    sSubKeyName = 'SOFTWARE\Microsoft'
}

$subkeys = Invoke-CimMethod -ClassName StdRegProv -MethodName EnumKey -Arguments $arguments
subkeys.sNames

StdRegProv a différentes méthodes pour lire les différents types de données de valeur d’entrée de Registre. Si l’entrée a des valeurs inconnues, vous pouvez appeler StdRegProv.EnumValues pour les répertorier. Le tableau suivant répertorie la correspondance entre les méthodes StdRegProv et les types de données.

Method Type de données
GetBinaryValue REG_BINARY
GetDWORDValue REG_DWORD
GetExpandedStringValue REG_EXPAND_SZ
GetMultiStringValue REG_MULTI_SZ
GetStringValue REG_SZ

 

Le tableau suivant répertorie les méthodes correspondantes pour créer de nouvelles clés ou valeurs, ou modifier des clés existantes.

Method Type de données
SetBinaryValue REG_BINARY
SetDWORDValue REG_DWORD
SetExpandedStringValue REG_EXPAND_SZ
SetMultiStringValue REG_MULTI_SZ
SetStringValue REG_SZ

 

L’exemple suivant montre comment lire la liste des sources du journal des événements système à partir de la clé de Registre.

\HKEY_LOCAL_MACHINE SYSTEM\Current Control Set\Services\Eventlog System\

Notez que les éléments de la valeur multistring sont traités comme une collection ou un tableau.

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SYSTEM\CurrentControlSet\Services\Eventlog\System"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
Wscript.Echo subkey
    
Next

Remarque

VBScript est obsolète. Pour plus d’informations, consultez le billet de blog de dépréciation VBScript : Chronologies et étapes suivantes.


# The signature for EnumKey method of StdRegProv class:
#
# uint32 EnumKey(
#  [in]  uint32 hDefKey = HKEY_LOCAL_MACHINE,
#  [in]  string sSubKeyName,
#  [out] string sNames[]
# );

$arguments = @{
    hDefKey = [uint32]2147483650 # HKEY_LOCAL_MACHINE
    sSubKeyName = 'SYSTEM\CurrentControlSet\Services\Eventlog\System'
}

$subkeys = Invoke-CimMethod -ClassName StdRegProv -MethodName EnumKey -Arguments $arguments
subkeys.sNames

Le fournisseur de Registre est hébergé dans LocalService, et non dans LocalSystem. Par conséquent, l’obtention d’informations à distance à partir de la sous-arborescence HKEY_CURRENT_USER n’est pas possible. Toutefois, les scripts exécutés sur l’ordinateur local peuvent toujours accéder à HKEY_CURRENT_USER. Vous pouvez définir le modèle d’hébergement sur LocalSystem sur une machine distante, mais c’est un risque de sécurité, car le Registre sur l’ordinateur distant est vulnérable à l’accès hostile. Pour plus d’informations, consultez Hébergement et sécurité du fournisseur.

Tâches WMI : Registre