Virtualizzazione del Registro di sistema
La virtualizzazione del Registro di sistema è una tecnologia di compatibilità dell'applicazione che consente di reindirizzare le operazioni di scrittura del Registro di sistema che hanno un impatto globale in 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 di compatibilità dell'applicazione provvisoria; Microsoft intende rimuoverla dalle versioni future del sistema operativo Windows perché più applicazioni sono compatibili con Windows Vista e versioni successive di Windows. È quindi importante che l'applicazione non diventi dipendente dal comportamento della virtualizzazione del Registro di sistema nel sistema.
La virtualizzazione è destinata solo a fornire compatibilità per le applicazioni esistenti. Le applicazioni progettate per Windows Vista e versioni successive di Windows non devono scrivere nelle aree di sistema sensibili, né devono basarsi sulla virtualizzazione per risolvere eventuali problemi. Quando si aggiorna il codice esistente da eseguire in Windows Vista e nelle versioni successive di Windows, gli sviluppatori devono assicurarsi che le applicazioni archiviano solo i dati in posizioni per utente o in posizioni computer all'interno di %alluserprofile% che usino correttamente un elenco di controllo di accesso (ACL).
Per altre informazioni sulla creazione di applicazioni conformi all'interfaccia utente, vedere la Guida per sviluppatori UAC.
Panoramica della virtualizzazione
Prima di Windows Vista, le applicazioni vengono 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 venivano eseguite da un utente standard, non riuscirebbero 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 una posizione 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 ampiamente classificata nei tipi seguenti:
-
Aprire La virtualizzazione del Registro di sistema
-
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.
-
Scrittura della virtualizzazione del Registro di sistema
-
Se il chiamante non ha accesso in scrittura a una chiave e tenta di scrivere un valore a 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\SoftwareAppKey1, la virtualizzazione reindirizza l'operazione di scrittura a HKEY_USERS\\User SID>_Classes\VirtualStore\<Machine\Software\AppKey1.
-
Leggere La 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 ,HKEY_LOCAL_MACHINE\Software\AppKey1 contenga due valori V1 e V2 e che un utente limitato scrive un valore V3 nella chiave. Quando l'utente tenta di leggere i valori da questa chiave, la visualizzazione unita include 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 verrà comunque restituito al chiamante dall'archivio virtuale. Se V3 deve essere eliminato dall'archivio virtuale, v3 verrà restituito dall'archivio globale. In altre parole, se V3 doveva essere eliminato da HKEY_USERS\User SID>_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 quanto segue:
- Processi interattivi a 32 bit.
- Chiavi in HKEY_LOCAL_MACHINE\Software.
- Chiavi a cui un amministratore può scrivere. Se un amministratore non può scrivere in una chiave, l'applicazione non è riuscita nelle versioni precedenti di Windows anche se è stata eseguita da un amministratore.
La virtualizzazione del Registro di sistema è disabilitata per quanto segue:
Processi a 64 bit.
Processi che non sono 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 non abilitato per la virtualizzazione) 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.
Elabora che rappresenta 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 che hanno richiestoExecutionLevel specificato nei propri 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 a chiave per chiavi in HKEY_LOCAL_MACHINE\Software. A tale scopo, usare l'opzione FLAGS dell'utilità da riga di comando Reg.exe con i flag elencati nella tabella seguente.
Flag | Significato |
---|---|
REG_KEY_DONT_SILENT_FAIL | Questo flag disabilita la virtualizzazione del Registro di sistema aperta. Se questo flag è impostato e un'operazione aperta ha esito negativo 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 MAXIMUM_ALLOWED accesso anziché 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 ha esito negativo 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 è deselezionato, il Registro di sistema tenta di scrivere la chiave o il valore nell'archivio virtuale. Il chiamante deve avere la KEY_READ destra 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à da riga di comando Reg.exe con l'opzione FLAGS per eseguire 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 è abilitato su una chiave che viene virtualizzata, viene generato un nuovo evento di controllo di 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