Recupero dei dati del Registro di sistema

È possibile ottenere o modificare i dati del Registro di sistema usando la classe WMI StdRegProv e i relativi metodi. Mentre si usa l'utilità Regedit per visualizzare e modificare i valori del Registro di sistema nel computer locale, StdRegProv consente di usare uno script o un'applicazione per automatizzare tali attività nel computer locale e nei computer remoti.

StdRegProv contiene metodi per eseguire le operazioni seguenti:

  • Verificare le autorizzazioni di accesso per un utente
  • Creare, enumerare ed eliminare chiavi del Registro di sistema
  • Creare, enumerare ed eliminare sottochiavi o valori denominati
  • Leggere, scrivere ed eliminare i valori dei dati

I dati del Registro di sistema sono organizzati in base a sottoalberi, chiavi e sottochiavi annidati in una chiave di primo livello. I valori di dati effettivi vengono chiamati voci o valori denominati.

I sottoalberi includono quanto segue:

  • HKEY_CLASSES_ROOT (abbreviato come HKCR)
  • HKEY_CURRENT_USER (HKCU)
  • HKEY_LOCAL_MACHINE (HKLM)
  • HKEY_USERS
  • HKEY_CURRENT_CONFIG

Ad esempio, nella voce del Registro di sistema HKEYSOFTWAREMicrosoftDirectXInstalledVersion \\\\ il sottoalbero HKEY è SOFTWARE, le sottochiavi sono Microsoft e DirectX e la voce di valore denominata è InstalledVersion.

Un oggetto RegistryKeyChangeEvent si verifica quando si verifica una modifica a una chiave specifica, ma la voce non identifica il modo in cui i valori cambiano e questo evento viene attivato dalle modifiche sotto la chiave specificata. Per identificare le modifiche in qualsiasi punto di una struttura di chiavi gerarchica, usare RegistryTreeChangeEvent, che non restituisce valori specifici o modifiche delle chiavi che si verificano. Per ottenere una modifica del valore di voce specifica, usare RegistryValueChangeEvent e quindi leggere la voce per ottenere un valore di base.

StdRegProv include solo metodi che possono essere chiamati da C++ o script, che sono diversi dalla struttura della classe Win32.

Nell'esempio di codice seguente viene illustrato come utilizzare il metodo StdRegProv.EnumKey per elencare tutte le sottochiavi software Microsoft nella chiave del Registro di sistema.

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

$HKEY_LOCAL_MACHINE = 2147483650
$strKeyPath = "SOFTWARE\Microsoft"

$objReg = [WMIClass]"root\default:StdRegProv"

$arrSubKeys = $objReg.EnumKey($HKEY_LOCAL_MACHINE, $strKeyPath)
foreach ($subKey in ($arrSubKeys.sNames))
{
    $subKey
}

StdRegProv include diversi metodi per la lettura dei vari tipi di dati dei valori di voce del Registro di sistema. Se la voce contiene valori sconosciuti, è possibile chiamare StdRegProv.EnumValues per elencarli. La tabella seguente elenca la corrispondenza tra i metodi StdRegProv e i tipi di dati.

Metodo Tipo di dati
GetBinaryValue REG_BINARY
GetDWORDValue REG_DWORD
GetExpandedStringValue REG_EXPAND_SZ
GetMultiStringValue REG_MULTI_SZ
GetStringValue REG_SZ

 

Nella tabella seguente sono elencati i metodi corrispondenti per la creazione di nuove chiavi o valori o la modifica di quelli esistenti.

Metodo Tipo di dati
SetBinaryValue REG_BINARY
SetDWORDValue REG_DWORD
SetExpandedStringValue REG_EXPAND_SZ
SetMultiStringValue REG_MULTI_SZ
SetStringValue REG_SZ

 

Nell'esempio seguente viene illustrato come leggere l'elenco di origini per il registro eventi di sistema dalla chiave del Registro di sistema.

HKEY_LOCAL_MACHINE\SISTEMA\Set di\ controlli corrente Servizi\Eventlog\Sistema

Si noti che gli elementi nel valore multistringa vengono considerati come una raccolta o una matrice.

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

Il provider del Registro di sistema è ospitato in LocalService, non in LocalSystem. Pertanto, non è possibile ottenere informazioni in remoto dal HKEY_CURRENT_USER sottoalbero. Tuttavia, gli script eseguiti nel computer locale possono comunque accedere HKEY_CURRENT_USER. È possibile impostare il modello di hosting su LocalSystem in un computer remoto, ma questo è un rischio per la sicurezza perché il Registro di sistema nel computer remoto è vulnerabile all'accesso ostile. Per altre informazioni, vedere Hosting e sicurezza del provider.

Esempio

L'esempio di codice VBScript Read a Binary Registry Value in TechNet Gallery usa WMI per leggere un valore del Registro di sistema binario.

Attività WMI: Registro di sistema