Virtualizzazione del Registro di sistema
la virtualizzazione del Registro di sistema è una tecnologia di compatibilità delle applicazioni che consente di reindirizzare le operazioni di scrittura del Registro di sistema che hanno un impatto globale su posizioni per utente. Questo reindirizzamento è trasparente alle applicazioni che leggono o scrivono nel Registro di sistema. È supportato a partire da Windows Vista.
Questa forma di virtualizzazione è una tecnologia provvisoria di compatibilità delle applicazioni; Microsoft intende rimuoverlo dalle versioni future del sistema operativo Windows poiché più applicazioni sono rese compatibili con Windows Vista e versioni successive di Windows. È quindi importante che l'applicazione non dipenda dal comportamento della virtualizzazione del Registro di sistema nel sistema.
La virtualizzazione è destinata solo a garantire la compatibilità per le applicazioni esistenti. Le applicazioni progettate per Windows Vista e versioni successive di Windows non devono scrivere in aree di sistema sensibili, né devono basarsi sulla virtualizzazione per risolvere eventuali problemi. Quando si aggiorna il codice esistente per l'esecuzione in Windows Vista e versioni successive di Windows, gli sviluppatori devono assicurarsi che le applicazioni archiviano solo i dati in percorsi per utente o in percorsi computer all'interno di %alluserprofile% che usino correttamente un elenco di controllo di accesso (ACL).
Per altre informazioni sulla creazione di applicazioni conformi al controllo dell'account utente, vedere la guida per gli sviluppatori controllo dell'account utente.
Panoramica della virtualizzazione
Prima di Windows Vista, le applicazioni venivano in genere eseguite dagli amministratori. Di conseguenza, le applicazioni possono accedere liberamente ai file di sistema e alle chiavi del Registro di sistema. Se queste applicazioni sono state eseguite da un utente standard, l'utente non riuscirà a causa di diritti di accesso insufficienti. Windows Vista e versioni successive di Windows migliorano la compatibilità delle applicazioni per queste applicazioni reindirizzando automaticamente queste operazioni. Ad esempio, le operazioni del Registro di sistema nell'archivio globale (HKEY_LOCAL_MACHINE\Software) vengono reindirizzate a un percorso per utente all'interno del profilo dell'utente noto come archivio virtuale (HKEY_USERS\<USER SID>_Classes\VirtualStore\Machine\Software).
La virtualizzazione del Registro di sistema può essere classificata in generale nei tipi seguenti:
-
Open Registry Virtualization
-
Se il chiamante non ha accesso in scrittura a una chiave e tenta di aprire la chiave, la chiave viene aperta con l'accesso massimo consentito per tale chiamante.
Se il flag REG_KEY_DONT_SILENT_FAIL è impostato per la chiave, l'operazione ha esito negativo e la chiave non viene aperta. Per altre informazioni, vedere "Controllo della virtualizzazione del Registro di sistema" più avanti in questo argomento.
-
Virtualizzazione del Registro di sistema di scrittura
-
Se il chiamante non ha accesso in scrittura a una chiave e tenta di scrivere un valore in esso o di creare una sottochiave, il valore viene scritto nell'archivio virtuale.
Ad esempio, se un utente limitato tenta di scrivere un valore nella chiave seguente: HKEY_LOCAL_MACHINE\Software\AppKey1, la virtualizzazione reindirizza l'operazione di scrittura a HKEY_USERS\<USER SID>_Classes\VirtualStore\Machine\Software\AppKey1.
-
lettura della virtualizzazione del Registro di sistema
-
Se il chiamante legge da una chiave virtualizzata, il Registro di sistema presenta una visualizzazione unita dei valori virtualizzati (dall'archivio virtuale) e dei valori non virtuali (dall'archivio globale) al chiamante.
Si supponga, ad esempio, che HKEY_LOCAL_MACHINE\Software\AppKey1 contenga due valori V1 e V2 e che un utente limitato scriva un valore V3 nella chiave. Quando l'utente tenta di leggere i valori da questa chiave, la visualizzazione unita include i valori V1 e V2 dall'archivio globale e il valore V3 dall'archivio virtuale.
Si noti che i valori virtuali hanno la precedenza sui valori globali quando presenti. Nell'esempio precedente, anche se l'archivio globale ha valore V3 in questa chiave, il valore V3 viene comunque restituito al chiamante dall'archivio virtuale. Se V3 dovesse essere eliminato dall'archivio virtuale, la versione 3 verrà restituita dall'archivio globale. In altre parole, se V3 dovesse essere eliminato da HKEY_USERS\<SID utente>_Classes\VirtualStore\Machine\Software\AppKey1 ma HKEY_LOCAL_MACHINE\Software\AppKey1 aveva un valore V3, tale valore verrebbe restituito dall'archivio globale.
Ambito di virtualizzazione del Registro di sistema
La virtualizzazione del Registro di sistema è abilitata solo per gli elementi seguenti:
- Processi interattivi a 32 bit.
- Chiavi in HKEY_LOCAL_MACHINE\Software.
- Chiavi in cui un amministratore può scrivere. Se un amministratore non può scrivere in una chiave, l'applicazione avrebbe avuto esito negativo nelle versioni precedenti di Windows anche se fosse stata eseguita da un amministratore.
La virtualizzazione del Registro di sistema è disabilitata per quanto segue:
Processi a 64 bit.
Processi non interattivi, ad esempio i servizi.
Si noti che l'uso del Registro di sistema come meccanismo di comunicazione tra processi (IPC) tra un servizio (o qualsiasi altro processo che non ha la virtualizzazione abilitata) e un'applicazione non funzionerà correttamente se la chiave è virtualizzata. Ad esempio, se un servizio antivirus aggiorna i file di firma in base a un valore impostato da un'applicazione, il servizio non aggiornerà mai i file di firma perché il servizio legge dall'archivio globale, ma l'applicazione scrive nell'archivio virtuale.
Processi che rappresentano un utente. Se un processo tenta un'operazione durante la rappresentazione di un utente, tale operazione non verrà virtualizzata.
Processi in modalità kernel, ad esempio driver.
Processi con requestedExecutionLevel specificati nei relativi manifesti.
Chiavi e sottochiavi di HKEY_LOCAL_MACHINE\Software\Classes, HKEY_LOCAL_MACHINE\Software\Microsoft\Windowse HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT.
Controllo della virtualizzazione del Registro di sistema
Oltre a controllare la virtualizzazione a livello di applicazione usando requestedExecutionLevel nel manifesto, un amministratore può abilitare o disabilitare la virtualizzazione in base alle chiavi in HKEY_LOCAL_MACHINE\Software. A tale scopo, usare l'opzione FLAGS dell'utilità della riga di comando Reg.exe con i flag elencati nella tabella seguente.
Bandiera | Significato |
---|---|
REG_KEY_DONT_SILENT_FAIL | Questo flag disabilita la virtualizzazione del Registro di sistema aperta. Se questo flag è impostato e un'operazione di apertura non riesce su una chiave abilitata per la virtualizzazione, il Registro di sistema non tenta di riaprire la chiave. Se questo flag è chiaro, il Registro di sistema tenta di riaprire la chiave con accesso MAXIMUM_ALLOWED anziché con l'accesso richiesto. |
REG_KEY_DONT_VIRTUALIZE | Questo flag disabilita la virtualizzazione del Registro di sistema di scrittura. Se questo flag è impostato e un'operazione create key o set value non riesce perché il chiamante non dispone di un diritto di accesso sufficiente alla chiave padre, il Registro di sistema non riesce l'operazione. Se questo flag è chiaro, il Registro di sistema tenta di scrivere la chiave o il valore nell'archivio virtuale. Il chiamante deve avere il KEY_READ direttamente sulla chiave padre. |
REG_KEY_RECURSE_FLAG | Se questo flag è impostato, i flag di virtualizzazione del Registro di sistema vengono propagati dalla chiave padre. Se questo flag è chiaro, i flag di virtualizzazione del Registro di sistema non vengono propagati. La modifica di questo flag influisce solo sulle nuove chiavi discendenti create dopo la modifica del flag. Non imposta o cancella questi flag per le chiavi discendenti esistenti. |
Nell'esempio seguente viene illustrato l'uso dell'utilità della riga di comando Reg.exe con l'opzione FLAGS per eseguire una query sullo stato dei flag di virtualizzazione per una chiave.
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.
Ogni volta che il controllo viene abilitato su una chiave virtualizzata, viene generato un nuovo evento di controllo della virtualizzazione per indicare che la chiave viene virtualizzata (oltre agli eventi di controllo consueti). Gli amministratori possono usare queste informazioni per monitorare lo stato della virtualizzazione nei propri sistemi.
Argomenti correlati