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:

Virtualization1

Di lì comparirà in task manager la colonna virtualizzazione per ogni processo (clicca per ingrandire):

Virtualization2

È possibile quindi attivare/disattivare la virtualizzazione cliccando sul processo via tasto destro del mouse:

Virtualization3

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:

  1. aprire il command prompt
  2. digitare cd %SystemRoot%
  3. digitare echo hello > test.txt
  4. ci si beccherà l'errore "Access Denied"
  5. attivare la virtualizzazione per il processo CMD.EXE in questione via task manager
  6. digitare echo hello > test.txt
  7. questa volta nessun errore. Il file sembra essere davvero nella directory Windows, come si può notare lanciando il comando dir test.txt
  8. disattivare la virtualizzazione
  9. notare che il file - secondo il command prompt - è 'scomparso'. In realtà il file sarà comunque rintracciabile come %localappdata%\virtualstore\windows\test.txt

Virtualization4

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

Technorati Tags: ,

Potrebbero interessarti anche:
Commenti (12):
1. ViK
martedì 10 luglio 2007 alle 8:11 PM - unknown unknown unknown
   

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).

   
2. Paperino
martedì 10 luglio 2007 alle 8:30 PM - unknown unknown unknown
   

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...

   
3. Blackstorm
martedì 10 luglio 2007 alle 9:42 PM - unknown unknown unknown
   

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?

   
4. sirus
martedì 10 luglio 2007 alle 9:48 PM - unknown unknown unknown
   

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.

   
5. luca
mercoledì 11 luglio 2007 alle 10:21 AM - unknown unknown unknown
   

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.

   
6. sirus
mercoledì 11 luglio 2007 alle 6:37 PM - unknown unknown unknown
   

Non ero al corrente di questa miglioria. Benissimo!

   
7. ru86
domenica 22 luglio 2007 alle 11:37 AM - unknown unknown unknown
   

ma io se apro task manager non ho l'opzione "View/Select Columns per spuntare la voce virtualizzazione!!!!

come maii!??!?!

   
8. Paperino
domenica 22 luglio 2007 alle 6:01 PM - unknown unknown unknown
   

RU86:

ci sono molte colonne. Hai notalo la scrollbar a destra? Anche a me la prima volta mi era sfuggita

   
9. Blackstorm
domenica 22 luglio 2007 alle 6:03 PM - unknown unknown unknown
   

@ru86:

Basta andare sul tab processes, cliccare col tasto destro, et voilà: appare la voce virtualization... :D

   
10. alex
martedì 3 febbraio 2009 alle 10:14 PM - unknown unknown unknown
   

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

   
11. alex
martedì 3 febbraio 2009 alle 10:15 PM - unknown unknown unknown
   

se riuscite ad aiutarmi scrivetemi a aledimi89@msn.com

vi ringrazio!!!

   
12. Lello
martedì 7 aprile 2009 alle 3:21 PM - IE 7.0 Windows Vista
   

si chiama coincidenza baby...coincidenza!

   
Lascia un commento:
Commento: (clicca su questo link per gli smiley supportati; regole di ingaggio per i commenti)
(opzionale, per il Gravatar)