Windows Vista: attenzione alla Data Redirection

Windows Vista utilizza un compromesso per aumentare la sicurezza del sistema e mantenere al contempo una certa compatibilità con quei programmi che qualcuno definirebbe 'maleducati', che hanno il 'vizio' di andare a scrivere dati in zone delicate come la cartella Program Files.
Come ormai è ben noto, Vista di default avvia i programmi senza pieni diritti da administrator, per cui questi non hanno il permesso di andare a scrivere in queste aree sensibili.

Questa tecnica si chiama Data Redirection (aka Data Virtualization), Igor ne aveva già parlato tempo fa, anche se per un aspetto un po' diverso (non so se in realtà quella cui lui si riferiva fosse proprio la Data Redirection).

In breve, la Data Redirection consiste nel dirottare le operazioni di scrittura effettuate dai programmi in aree 'delicate', come le directory c:\windows o c:\program files, o in chiavi del registry, verso altre zone legate all'utente.
Ad esempio, se un programma residente in una sotto-directory di c:\program files\ prova a scrivere un file di log nella stessa directory in cui risiede l'exe (o in una sotto-directory), il file verrà in realtà scritto in una directory 'gemella' residente in C:\Users\nomeutente\AppData\Local\VirtualStore\Program Files, quindi all'interno dell'area dedicata ai dati dell'utente.
Questa feature è trasparente per l'applicazione, che crederà di andare a scrivere e leggere direttamente in c:\program files.

C'è, però, una particolarità in questa tecnica, che imho può creare un po' di confusione all'utente, se esegue particolari operazioni (come è capitato a me).

I programmi, al momento della compilazione, possono essere contrassegnati con un run level indicante che la Data Redirection non deve essere supportata. Tutti i programmi che vogliono essere certificati compatibili con Windows Vista (e quindi anche i programmi già inclusi nel sistema operativo, come il notepad), devono avere questo flag, ed essere quindi progettati ed eseguibili secondo i prinicipi del 'least privilege', senza ricorrere alla Data Redirection (cioè devono andare a scrivere i dati direttamente nelle aree dedicate, come quella del profilo utente, e non in c:\program files).

La 'confusione' può nascere se con un programma che usa la Data Redirection si va a modificare un file in c:\program files\, e quindi in realtà la modifica verrà salvata in un file in c:\users\, e poi lo si va a riaprire da c:\program files con un programma come il notepad, compilato in modo tale da non usare la Data Redirection: il file che verrà visualizzato dal notepad sarà quello originale realmente presente in c:\program files, e non quello modificato.

Nel mio caso specifico, avevo modificato dei file in c:\program files con WinMerge, effettuando il merge con altri file: riaprendo quei file modificati da tool come WinMerge o Windows Grep, che usano la Data Redirection, vedevo correttamente le modifiche, mentre se lo aprivo con il notepad o con il visual studio vedevo il file originale.
Per apportare effettivamente in c:\program files quelle modifiche, in modo da vederle anche da applicazione come notepad, era sufficiente utilizzare il tool, nel caso specificio WinMerge, eseguendolo con diritti da admin...per il momento li ho semplicemente spostati da c:\users a c:\program files (previo consenso alla UAC!).

Per chi è interessato ad approfondire l'argomento, e altre security features di Vista, ecco un riferimento.

PS: grazie a colui che sul newsgroup mi ha aiutato a capire cosa accadesse realmente...peccato non sappia il nome!