Von web master auf Dienstag, 28. Februar 2012
Kategorie: Microsoft

Datei- und Registryvirtualisierung unter Windows 7

Allgemein

Unter Windows XP mussten Anwendungen, die während der Laufzeit auf Windows Systemordner oder auf die LOCAL_MACHINE/Software-Bereiche der Registry schreibend zugegriffen haben, mit administrativen Rechten laufen. Alternativ musste der Zugriff auf den entsprechenden Ordner (meist der Programmordner) oder Registrykey mit schreibenden Rechten für die User ausgestattet werden.

In Windows 7 (streng genommen seit Windows Vista) existiert nun die Datei- und Registry Virtualisierung, die es ermöglicht auch solche schlecht programmierten Anwendungen (also Anwendungen die sich nicht nach MS-Entwicklungsrichtlinien richten) ohne Eingriff in die Berechtigungsverwaltung ans Laufen zu bringen. Realisiert wird dies über den Kernel-Mode Treiber luafv.sys.

Die Dateisystem- und Registryvirtualisierung erkennt, wenn Zugriffe verweigert werden, weil eine Anwendung nicht genügend Privilegien besitzt und lenkt die Zugriffe auf ein lokales Verzeichnis im Userbereich um. Dies geschieht völlig unbemerkt von der Anwendung, für die sich das neue lokale Verzeichnis absolut identisch zu seinem System-Pendant präsentiert.

Der Virtualisierungsstatus jeder einzelnen Anwendung kann über den Taskmanager eingeblendet werden. Hierfür muss die entsprechende Spalte unter Ansicht -> Spalten auswählen -> Virtualisierung der Benutzerkontensteuerung aktiviert werden. Standardmäßig wird für den 32-Bit Internet Explorer die Virtualisierung aktiviert, da dieser als Host für ActiveX-Controls und Scripts dient, die potentiell nicht mit der Ausführung unter normalen Benutzerrechten kompatibel ist. Über das Kontextmenu lässt sich die Virtualisierung eines jeden Prozesses manuell verändern.

Dateisystemvirtualisierung

Virtualisiert werden die Systemverzeichnisse %ProgramFiles%, %ProgramFiles(x86)%, %ProgramData% und %Systemroot%. Das Root Verzeichnis für die virtualisierten Dateien ist %LOCALAPPDATA%\VirtualStore.

Um die Funktionalität der Datei- und Registryvirtualisierung zu testen, kann eine cmd aufgemacht werden und eine Datei (z.B. mit dem Befehl „echo Virtualisierung aktiv > c:\windows\UACActive.ini“) geschrieben werden (Vorher im Task Manager die Virtualisierung des Prozesses cmd.exe aktivieren). Die Datei wird nun in den Pfad „C:\Users\\AppData\Local\VirtualStore\Windows“ geschrieben. Wird das Verzeichnis „c:\Windows“ mit einem dir-Befehl ausgelesen, wird dort ganz normal die UACActive.ini Datei angezeigt. Wird das Verzeichnis mit dem Windows Explorer angeschaut (der ja eine 64-Bit Anwendung ist und somit ohne Virtualisierung läuft) fehlt die Datei. Der Explorer bietet für diesen Fall den Button „Kompatibilitätsdateien“ in der Symbolleiste an, um direkt in den VirtualStore zu springen.

Ausführbare Binärdateien (EXE, BAT, PS1, SCR, DLL, etc.) sind von der Dateivirtualisierung ausgenommen. Sollen weitere Dateien ausgenommen werden, kann unter "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Luafv\Parameters" ein neuer REG_EXPAND_SZ Wert mit dem Namen "ExcludedExtensionsAdd" angelegt und mit den gewünschten zusätzlich zu exkludierenden Dateiendungen befüllt werden.

Sollen Anwendungen (z.B. in DSM 7) paketiert werden, die mit Hilfe der Dateivirtualisierung verteilt werden sollen, können Dateien auch direkt in den VirtualStore geschrieben werden.

Registry Virtualisierung

Die Registry Virtualisierung läuft nach einem sehr ähnlichen Schema ab. Wird versucht, einen Registry Key unterhalb von HKLM\Software zu schreiben, wird dieser über die Registry Virtualisierung abgefangen und nach „HKEY_USERS\>UserSID_Classes\VirtualStore“ (oder eben "HKEY_CURRENT_USER\Software\Classes\VirtualStore") umgeleitet. Wenn ein Benutzer versucht einen Registrykey zu lesen der Werte beinhaltet, die ganz normal in der Registry gespeichert sind und teilweise im virtualisierten Pfad, baut Windows im Hintergrund daraus eine vollständige Ansicht des Registrykeys auf, so dass sich dieser für eine Anwendung immer vollständig präsentiert.

Folgende Voraussetzungen müssen gegeben sein, damit die Registry-Virtualisierung für einen Anwendung genutzt wird:

Für eine Anwendung, für die ein Manifest existiert und „requestedExecutionLevel“ definiert ist, kann die Registry Virtualisierung explizit pro Key konfiguriert werden. Zu diesem Zweck werden flags geschrieben, die den Status der Virtualisierung pro Registry Key definieren. Folgende Flags sind möglich:

Flag

Bedeutung

REG_KEY_DONT_VIRTUALIZE

Dieser Flag schaltet die Virtualisierung für den betroffenen Key aus. Ein Schreibvorgang auf den betroffenen Key würde mit einer Anwendung für die die Registry Virtualisierung aktiv ist mit einer Fehlermeldung fehlschlagen.

REG_KEY_DONT_SILENT_FAIL

Wird dieses Flag gesetzt, wird der Benutzer über eine Umleitung benachrichtigt.

REG_KEY_RECURSE_FLAG

Setzt die Virtualisierungsoptionen automatisch für jeden neu angelegten Sub-Key. Wird das Flag gelöscht, werden keine Flags für bestehende Sub-Keys geändert.

Diese Statusflags können mit dem Commandline Tool „reg.exe“ modifiziert und eingesehen werden.

Praktische Anwendung

Grundsätzlich sollte speziell bei DSM SPY Paketen auf die Virtualisierungpfade im Dateisystem und in der Registry geachtet werden. Sollen Konfigurationseinstellungen für den User in solchen betroffenden Dateien gesetzt werden, können diese im DSM Paket direkt in den Virtualisierungspfaden erstellt werden. Diese Userbezogenen Befehle müssen entsprechend geflagged und die Verteilung von Benutzerteilen am Paket muss aktiviert sein.

Verwandte Beiträge

Kommentare hinterlassen