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_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 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
Nota
VBScript è deprecato. Per informazioni dettagliate, vedere il post di blog relativo alla deprecazione di VBScript: Sequenze temporali e passaggi successivi.
# 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 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 = "SYSTEM\CurrentControlSet\Services\Eventlog\System"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
Wscript.Echo subkey
Next
Nota
VBScript è deprecato. Per informazioni dettagliate, vedere il post di blog relativo alla deprecazione di VBScript: Sequenze temporali e passaggi successivi.
# 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
Il provider del Registro di sistema è ospitato in LocalService, non in LocalSystem. Pertanto, non è possibile ottenere informazioni in remoto dal sottoalbero HKEY_CURRENT_USER . 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.
Argomenti correlati