La virtualizzazione dei file e del registry di Vista
(post ad alto contenuto tecnico)
Uno dei grattacapi di appcompat da risolvere per il rilascio di Vista è legato all'implementazione di UAC e al fatto che le applicazioni scritte per Windows XP, essendo eseguite di solito con permessi di amministratore, si potevano permettere di scrivere un po' ovunque nel file system. Il classico esempio è quello delle applicazioni che memorizzano i dati dell'utente direttamente nella directory C:\program files\applicazione
Per risolvere questo annoso problema in Vista è stato introdotto il concetto di "virtualizzazione dei file" (da non confondersi con la virtualizzazione via Virtual PC e similari). La virtualizzazione dei file può essere attivata o meno per ogni singolo processo. È possibile controllare se la virtualizzazione è attiva via Task Manager, avendo l'accortezza di aggiungere la colonna virtualizzazione a quanto attivo: per fare ciò selezionare il menù View/Select Columns e spuntare la voce virtualizzazione:
Di lì comparirà in task manager la colonna virtualizzazione per ogni processo (clicca per ingrandire):
È possibile quindi attivare/disattivare la virtualizzazione cliccando sul processo via tasto destro del mouse:
Due parole su cosa vuol dire virtualizzazione dei file: quando la virtualizzazione dei file per un processo è abilitata, tutte le operazioni di scrittura presso folder "proibiti" (%ProgramFiles%, %ProgramData%, and %SystemRoot%) vengono redirezionate presso il folder %LocalAppData%\VirtualStore. Cioè una applicazione virtualizzata cerca di creare e scrivere il file C:\windows\readme.txt, il file verrà creato come %LocalAppData%\VirtualStore\readme.txt
Come per ogni ogni regola, ci sono le eccezioni: vengono escluse da questo tipo di redirezione alcune sottodirectory ed i file target di tipo .EXE, .BAT, .SCR ed altri. Il motivo è semplice: se un processo cerca di sovrascrivere un eseguibile o similare, ci sono alte probabilità che si tratti di un updater e cioé un processo che cerca di aggiornare una applicazione.
È possibile aggiungere altre estensioni delle esclusioni alla lista editando questa chiave di registry e riavviando poi il sistema:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Luafv\Parameters\ExcludedExtensionsAdd
Un esperimento interessante da fare per provare la virtualizzazione è il seguente:
- aprire il command prompt
- digitare cd %SystemRoot%
- digitare echo hello > test.txt
- ci si beccherà l'errore "Access Denied"
- attivare la virtualizzazione per il processo CMD.EXE in questione via task manager
- digitare echo hello > test.txt
- questa volta nessun errore. Il file sembra essere davvero nella directory Windows, come si può notare lanciando il comando dir test.txt
- disattivare la virtualizzazione
- notare che il file - secondo il command prompt - è 'scomparso'. In realtà il file sarà comunque rintracciabile come %localappdata%\virtualstore\windows\test.txt
L'esatto opposto avviene durante le operazioni di lettura.
Un'ultima nota sul criterio usato dal sistema per decidere se un processo va virtualizzato o meno: una applicazione viene considerata legacy (e quindi virtualizzata) se è 32-bit, non è stata lanciata con permessi di amministratore e non contiene il manifest che indica si tratti di una applicazione Vista. Per quanto riguarda il registry un meccanismo simile è in funzione. Le voci di registry virtualizzate vengono redirezionate verso:
HKEY_ CURRENT_USER\Software\Classes\VirtualStore
A differenza del file system però, per il quale i folder da virtualizzare sono un insieme noto a priori, per il registry il bit che segnala se la chiave del registry va virtualizzata o meno è memorizzato nella chiave per ogni singola chiave.
Per maggiori informazioni su UAC e la virtualizzazione, rimando all'articolo in inglese apparso su Technet Magazine a firma di Russinovich.
-Enjoy



Facebook,
Wikio,
Segnalo.
- Page rendering time: 11 millisecs
martedì 10 luglio 2007 alle 8:11 PM -
In poche parole, un processo "rischioso" è meglio che abbia la virtualizzazione attiva? Io ho visto che praticamente tutti i miei processi hanno la virtualizzazione abilitata, tranne i processi di Windows stesso (come explorer.exe).
Permalink
martedì 10 luglio 2007 alle 8:30 PM -
La virtualizzazione non ha a che fare con la "sicurezza" ma con la compatibilità: se la virtualizzazione fosse spenta molte applicazioni smetterebbero semplicemente di funzionare, crashando nel momento in cui tentano di scrivere in "Program Files" (ad esempio versioni più vecchie di emule). È normale che quasi tutte le applicazioni che oggi usi siano virtualizzate. Man mano che escono versioni nuove, la virtualizzazione sarà rimpiazzata da comportamenti più appropriati.
Domanda per i soliti volenterosi: ma se emule (mi riferisco alla versione vecchia) è virtualizzato, come mai non funzionava correttamente? La risposta in un prossimo post...
Permalink
martedì 10 luglio 2007 alle 9:42 PM -
Bene, bene, supponevo che dipendesse da questo... attualmente emule continua ad essere virtualizzato, tutti i download me li piazza nel virtual store (io uso AdunanzA perchè ho fastweb, e non è ancora uscita una versione compatibile con Vista di AdunanzA). Il motivo per cui non funzionava mi sfugge, visto che a me ha sempre funzionato. Posso suppore che Win Defender tendeva a bloccargli le inbound connections sulle porte che usava il mulo, ma sarebbe bastato abilitarlo. Un'altra ipotesi che potrei fare è che dipende da come è scritto il codice, che magari poteva andare a toccare zone di memoria che potevano essere a rischio secondo le nuove policy di Vista per la sicurezza, nel qual caso, sarebbe stato bloccato perchè scritto magari appositamente in maniera da sfruttare alcune caratteristiche di XP non presenti o modificate in Vista. Ho vinto quaccheccosa?
Permalink
martedì 10 luglio 2007 alle 9:48 PM -
Sarebbe interessante se ogni applicazione avesse un suo personale registry virtualizzato; secondo me si potrebbero risolvere quei pochi problemi di corruzione del registry che alle volte si verificavano nelle versoni precedenti di Windows.
Permalink
mercoledì 11 luglio 2007 alle 10:21 AM -
Per Sirus, guarda che il registro di Windows Vista non è mica più come quello di XP, ma utilizza Transactional-NTFS e ciò permette a più applicazioni contemporaneamente di accedere alla stessa chiave in maniera transazionale, impedendo che si possa danneggiare.
Permalink
mercoledì 11 luglio 2007 alle 6:37 PM -
Non ero al corrente di questa miglioria. Benissimo!
Permalink
domenica 22 luglio 2007 alle 11:37 AM -
ma io se apro task manager non ho l'opzione "View/Select Columns per spuntare la voce virtualizzazione!!!!
come maii!??!?!
Permalink
domenica 22 luglio 2007 alle 6:01 PM -
RU86:
ci sono molte colonne. Hai notalo la scrollbar a destra? Anche a me la prima volta mi era sfuggita
Permalink
domenica 22 luglio 2007 alle 6:03 PM -
@ru86:
Basta andare sul tab processes, cliccare col tasto destro, et voilà: appare la voce virtualization...
Permalink
martedì 3 febbraio 2009 alle 10:14 PM -
ciao ragazzi,
per sbaglio ho deselezionato 'virtualizzazione' da un processo in esecuzione: si trattava di splintercell.exe
un istante dopo il pc si è spento e non si accende più...
all'accensione si sentono le ventole e si accendono i led, ma non carica nulla: nemmeno la lettura di memoria...schermo praticamente nero
cosa può essere? dipende dalla visrtualizzazione o si è rotto qualcosa a livello hardware
Permalink
martedì 3 febbraio 2009 alle 10:15 PM -
se riuscite ad aiutarmi scrivetemi a aledimi89@msn.com
vi ringrazio!!!
Permalink
martedì 7 aprile 2009 alle 3:21 PM -
si chiama coincidenza baby...coincidenza!
Permalink