Dateisystem- und Registry-Virtualisierung in Windows 7

    Teaser VirtualstoreDie Dateisystem- und Registry-Virtualisierung gestattet es, viele alte Anwendungen unter Windows 7 zu betreiben, ohne virtuelle Maschinen verwenden zu müssen. Speziell geht es um Programme, die nicht fähig sind (beziehungsweise es bis unter Windows XP nicht waren), ohne Administratorrechte zu laufen, da sie Daten und Benutzereinstellungen in System-Dateiverzeichnissen und System-Registry-Schlüsseln ablegen.

    Unter XP musste man, wenn man derart programmierte Software verwenden wollte, sich als Administrator anmelden, was dann auch der Regelfall war, allerdings ein erhebliches Sicherheitsrisiko darstellte. In einem TechNet-Artikel gibt Mark Russinovich Einblicke in technische Details, die ursprünglich zu Windows Vista verfaßt wurden, aber auch unter Windows 7 noch aktuell sind.

    Teaser 2 VirtualstoreDie Dateisystem- und Registry-Virtualisierung erkennt, wenn Zugriffe verweigert werden, weil eine Anwendung nicht genügend Privilegien besitzt und biegt sie so um, daß sie in einem benutzerlokalen Verzeichnis beziehungsweise Registry-Schlüssel landen – unbemerkt für die Anwendung, aus deren Sicht das virtualisierte Verzeichnis beziehungsweise der virtualisierte Registry-Schlüssel wie sein System-Pendant aussieht. Der Virtualisierungsstatus für einen Prozess wird zusammen mit den anderen Informationen wie Benutzerkontext, Gruppenmitgliedschaften und Privilegien in dessen Token gespeichert. Windows virtualisiert alle Prozesse, die es als „legacy“ („Altlast“) einstuft. Dazu müssen diese folgende Bedingungen erfüllen:

    Windows-TaskmanagerWeil der Internet-Explorer Host für ActiveX-Anwendungen und Scripts ist, bei denen man annimmt, daß sie potentiell nicht kompatibel für die Ausführung mit normalen Benutzerrechten sind, stuft Windows iexplore.exe ebenfalls als „legacy“ ein. Im Task-Manager können Sie den Virtualisierungsstatus für jeden Prozeß sehen, nachdem Sie die entsprechende Spalte über das Menü „Ansicht“ eingeblendet haben. Per Kontextmenü können Sie außerdem den Virtualisierungsstatus jedes Prozesses ändern, nachdem Sie eine – sehr berechtigte – Windows-Warnung vor potentiellem Datenverlust bestätigt haben.

    Damit lassen sich die Effekte der Virtualisierung leicht testen: Starten Sie eine Eingabeaufforderung und wechseln den Virtualisierungsstatus des entsprechenden Prozesses cmd.exe, um dann in Systemverzeichnissen Dateien oder Verzeichnisse anzulegen oder Registry-Schlüssel mittels des Kommandozeilentools reg.exe zu bearbeiten. Je nach Status wird Windows die Aktion verweigern oder aber im virtualisierten Speicherplatz durchführen.

    Dateisystemvirtualisierung

    Die Dateisystemvirtualisierung realisiert Windows über den Kernel-Mode-Treiber luafv.sys. Virtualisiert werden die Systemverzeichnisse %ProgramFiles%, %ProgramData% und %SystemRoot%. Das virtualisierte Wurzelverzeichnis eines Benutzers befindet sich jeweils unter %LOCALAPPDATA%\VirtualStore.

    Beispiel: Will eine Legacy-Anwendung eine Datei namens C:\Windows\Anwendung.ini anlegen, landet sie stattdessen in

    %LOCALAPPDATA%\VirtualStore\Windows\Anwendung.ini.

    Ausführbare Dateien sind von der Virtualisierung ausgenommen – eine Legacy-Anwendung kann also nicht etwa „Privat“-Versionen von EXE-Dateien oder Scripts im virtualisierten Verzeichnis ablegen.

    Der Windows-Explorer besitzt eine Funktion, die bei der Suche nach virtualisierten Dateien hilft: Öffnen Sie ein System-Verzeichnis, zu dem es eine virtualisierte Version gibt, blendet der Explorer eine zusätzliche Schaltfläche ein, über die Sie das virtualisierte Verzeichnis öffnen können.

    Registry-Virtualisierung

    Windows virtualisiert den größten Teil des Registry-Zweiges HKLM\Software, jedoch mit Ausnahme von HKLM\Software\Microsoft\Windows, HKLM\Software\Microsoft\Windows NT und HKLM\Software\Classes. Die virtualisierten Maschinen-Registry-Schlüssel befinden sich unter HKU\‹User-SID›_Classes, was bei der Anmeldung eines Benutzers jeweils unter HKCU\Software\Classes\VirtualStore eingebunden wird. Mittels des Flags REG_ KEY_DONT_VIRTUALIZE kann in jedem Schlüssel festgelegt sein, dass er nicht virtualisiert werden darf; ist außerdem REG_KEY_RECURSE_FLAG gesetzt, übernehmen neu angelegte Unterschlüssel diese Einstellung.

    Versuche von Legacy-Anwendungen, Registry-Daten in Schlüssel mit den Flag REG_ KEY_DONT_VIRTUALIZE anzulegen, gehen standardmäßig ins Leere, das heißt Windows gewährt nicht die von der Anwendung angeforderten Rechte, sondern nur die, welche der aufrufende Benutzer auf den echten Schlüssel innehat. Nur wenn ein weiteres Flag REG_KEY_ DONT_SILENT_FAIL gesetzt ist, erfährt die Anwendung, daß der Anforderung nicht entsprochen wurde, so dass sie darauf eventuell mit einer Fehlermeldung reagieren kann.

    Keine Kommentare