Recupero dei dati del Registro di sistema

È possibile ottenere o modificare i dati del Registro di sistema usando la classe StdRegProv WMI e i relativi metodi. Quando 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 valori di dati

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

I sottoalberi includono quanto segue:

  • HKEY_CLASedizione StandardS_ROOT (abbreviato come HKCR)
  • HKEY_CURRENT_Uedizione Standard R (HKCU)
  • HKEY_LOCAL_MACHINE (HKLM)
  • HKEY_Uedizione Standard RS
  • HKEY_CURRENT_CONFIG

Ad esempio, nella voce del Registro di sistema HKEY\SOFTWARE\Microsoft\DirectX\InstalledVersion, 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 né questo evento verrà 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 di chiave 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 è diverso dalla struttura della classe Win32.

Nell'esempio di codice seguente viene illustrato come usare 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 metodi diversi 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 system\Current Control Set\Services\Eventlog System\

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 sottoalbero HKEY_CURRENT_Uedizione Standard R. Tuttavia, gli script eseguiti nel computer locale possono comunque accedere a HKEY_CURRENT_Uedizione Standard R. È 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.

Attività WMI: Registro di sistema