Registrierungsvirtualisierung

Die Registrierungsvirtualisierung ist eine Anwendungskompatibilitätstechnologie, mit der Registrierungsschreibvorgänge, die globale Auswirkungen haben, an Benutzerstandorte umgeleitet werden können. Diese Umleitung ist für Anwendungen transparent, die aus der Registrierung lesen oder in diese schreiben. Es wird ab Windows Vista unterstützt.

Bei dieser Form der Virtualisierung handelt es sich um eine Technologie für die Anwendungskompatibilität. Microsoft beabsichtigt, es aus zukünftigen Versionen des Windows-Betriebssystems zu entfernen, da mehr Anwendungen mit Windows Vista und höheren Versionen von Windows kompatibel gemacht werden. Daher ist es wichtig, dass Ihre Anwendung nicht vom Verhalten der Registrierungsvirtualisierung im System abhängig wird.

Virtualisierung dient nur der Kompatibilität für vorhandene Anwendungen. Anwendungen, die für Windows Vista und höhere Versionen von Windows entwickelt wurden, sollten weder in sensible Systembereiche schreiben, noch sollten sie sich auf die Virtualisierung verlassen, um Probleme zu beheben. Beim Aktualisieren von vorhandenem Code für die Ausführung unter Windows Vista und höheren Versionen von Windows sollten Entwickler sicherstellen, dass Anwendungen Daten nur an benutzerspezifischen Speicherorten oder an Computerstandorten in %alluserprofile% speichern, die ordnungsgemäß eine Zugriffssteuerungsliste (Access Control List, ACL) verwenden.

Weitere Informationen zum Erstellen von UAC-kompatiblen Anwendungen finden Sie im UAC-Entwicklerhandbuch.

Übersicht über die Virtualisierung

Vor Windows Vista wurden Anwendungen in der Regel von Administratoren ausgeführt. Daher könnten Anwendungen frei auf Systemdateien und Registrierungsschlüssel zugreifen. Wenn diese Anwendungen von einem Standardbenutzer ausgeführt würden, würden sie aufgrund unzureichender Zugriffsrechte fehlschlagen. Windows Vista und höhere Versionen von Windows verbessern die Anwendungskompatibilität für diese Anwendungen, indem diese Vorgänge automatisch umgeleitet werden. Beispielsweise werden Registrierungsvorgänge an den globalen Speicher (HKEY_LOCAL_MACHINE\Software) an einen benutzerspezifischen Speicherort innerhalb des Benutzerprofils weitergeleitet, der als virtueller Speicher (HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software) bezeichnet wird.

Die Registrierungsvirtualisierung kann im Allgemeinen in die folgenden Typen unterteilt werden:

Öffnen der Registrierungsvirtualisierung

Wenn der Aufrufer keinen Schreibzugriff auf einen Schlüssel hat und versucht, den Schlüssel zu öffnen, wird der Schlüssel mit dem maximal zulässigen Zugriff für diesen Aufrufer geöffnet.

Wenn das REG_KEY_DONT_SILENT_FAIL-Flag für den Schlüssel festgelegt ist, schlägt der Vorgang fehl, und der Schlüssel wird nicht geöffnet. Weitere Informationen finden Sie weiter unten in diesem Thema unter Steuern der Registrierungsvirtualisierung.

Schreibregistrierungsvirtualisierung

Wenn der Aufrufer keinen Schreibzugriff auf einen Schlüssel hat und versucht, einen Wert in diesen zu schreiben oder einen Unterschlüssel zu erstellen, wird der Wert in den virtuellen Speicher geschrieben.

Wenn ein eingeschränkter Benutzer beispielsweise versucht, einen Wert in den folgenden Schlüssel zu schreiben: HKEY_LOCAL_MACHINE\Software\AppKey1, leitet die Virtualisierung den Schreibvorgang an HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\AppKey1 um.

Lesen der Registrierungsvirtualisierung

Wenn der Aufrufer aus einem virtualisierten Schlüssel liest, stellt die Registrierung dem Aufrufer eine zusammengeführte Ansicht der virtualisierten Werte (aus dem virtuellen Speicher) und der nicht virtuellen Werte (aus dem globalen Speicher) dar.

Angenommen, HKEY_LOCAL_MACHINE\Software\AppKey1 zwei Werte V1 und V2 enthält und dass ein eingeschränkter Benutzer einen Wert V3 in den Schlüssel schreibt. Wenn der Benutzer versucht, Werte aus diesem Schlüssel zu lesen, enthält die zusammengeführte Ansicht die Werte V1 und V2 aus dem globalen Speicher und den Wert V3 aus dem virtuellen Speicher.

Beachten Sie, dass virtuelle Werte Vorrang vor globalen Werten haben, wenn sie vorhanden sind. Im obigen Beispiel würde der Wert V3 weiterhin vom virtuellen Speicher an den Aufrufer zurückgegeben, selbst wenn der globale Speicher den Wert V3 unter diesem Schlüssel hätte. Wenn V3 aus dem virtuellen Speicher gelöscht werden sollte, wird V3 aus dem globalen Speicher zurückgegeben. Anders ausgedrückt: Wenn V3 aus HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\AppKey1 gelöscht werden sollte, aber HKEY_LOCAL_MACHINE\Software\AppKey1 über den Wert V3 verfügt, würde dieser Wert aus dem globalen Speicher zurückgegeben.

Registrierungsvirtualisierungsbereich

Die Registrierungsvirtualisierung ist nur für Folgendes aktiviert:

  • Interaktive 32-Bit-Prozesse.
  • Schlüssel in HKEY_LOCAL_MACHINE\Software.
  • Schlüssel, in die ein Administrator schreiben kann. (Wenn ein Administrator nicht in einen Schlüssel schreiben kann, wäre die Anwendung unter früheren Versionen von Windows fehlgeschlagen, auch wenn sie von einem Administrator ausgeführt wurde.)

Die Registrierungsvirtualisierung ist für Folgendes deaktiviert:

  • 64-Bit-Prozesse.

  • Prozesse, die nicht interaktiv sind, z. B. Dienste.

    Beachten Sie, dass die Verwendung der Registrierung als IPC-Mechanismus (Inter-Process Communication) zwischen einem Dienst (oder einem anderen Prozess, für den die Virtualisierung nicht aktiviert ist) und einer Anwendung nicht ordnungsgemäß funktioniert, wenn der Schlüssel virtualisiert ist. Wenn ein Antivirendienst seine Signaturdateien für instance auf Der Grundlage eines von einer Anwendung festgelegten Werts aktualisiert, aktualisiert der Dienst seine Signaturdateien nie, da der Dienst aus dem globalen Speicher liest, die Anwendung jedoch in den virtuellen Speicher schreibt.

  • Prozesse, die die Identität eines Benutzers annehmen. Wenn ein Prozess einen Vorgang versucht, während er die Identität eines Benutzers annimmt, wird dieser Vorgang nicht virtualisiert.

  • Kernelmodusprozesse wie Treiber.

  • Prozesse, die den in ihren Manifesten angegebenenExecutionLevel angefordert haben.

  • Schlüssel und Unterschlüssel von HKEY_LOCAL_MACHINE\Software\Classes, HKEY_LOCAL_MACHINE\Software\Microsoft\Windowsund HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT.

Steuern der Registrierungsvirtualisierung

Neben der Steuerung der Virtualisierung auf Anwendungsebene mithilfe von requestedExecutionLevel im Manifest kann ein Administrator die Virtualisierung für Schlüssel in HKEY_LOCAL_MACHINE\Softwareaktivieren oder deaktivieren. Verwenden Sie hierzu die option flagS Reg.exe Befehlszeilenprogramm FLAGS mit den in der folgenden Tabelle aufgeführten Flags.

Flag Bedeutung
REG_KEY_DONT_SILENT_FAIL Dieses Flag deaktiviert die offene Registrierungsvirtualisierung. Wenn dieses Flag festgelegt ist und ein geöffneter Vorgang für einen Schlüssel fehlschlägt, für den die Virtualisierung aktiviert ist, versucht die Registrierung nicht, den Schlüssel erneut zu öffnen. Wenn dieses Flag eindeutig ist, versucht die Registrierung, den Schlüssel mit MAXIMUM_ALLOWED Zugriff anstelle des angeforderten Zugriffs erneut zu öffnen.
REG_KEY_DONT_VIRTUALIZE Dieses Flag deaktiviert die Schreibregistrierungsvirtualisierung. Wenn dieses Flag festgelegt ist und ein Vorgang zum Erstellen eines Schlüssels oder werts fehlschlägt, weil der Aufrufer nicht über ein ausreichendes Zugriffsrecht auf den übergeordneten Schlüssel verfügt, schlägt die Registrierung den Vorgang fehl. Wenn dieses Flag eindeutig ist, versucht die Registrierung, den Schlüssel oder Wert in den virtuellen Speicher zu schreiben. Der Aufrufer muss die KEY_READ rechts auf dem übergeordneten Schlüssel haben.
REG_KEY_RECURSE_FLAG Wenn dieses Flag festgelegt ist, werden Registrierungsvirtualisierungsflags vom übergeordneten Schlüssel weitergegeben. Wenn dieses Flag eindeutig ist, werden Registrierungsvirtualisierungsflags nicht weitergegeben. Das Ändern dieses Flags wirkt sich nur auf neue untergeordnete Schlüssel aus, die nach dem Ändern des Flags erstellt wurden. Diese Flags werden nicht für vorhandene untergeordnete Schlüssel festgelegt oder gelöscht.

 

Das folgende Beispiel zeigt die Verwendung des Befehlszeilenprogramms Reg.exe mit der FLAGS-Option, um den Status der Virtualisierungsflags für einen Schlüssel abzufragen.

C:\>reg flags HKLM\Software\AppKey1 QUERY

HKEY_LOCAL_MACHINE\Software\AppKey1

        REG_KEY_DONT_VIRTUALIZE: CLEAR
        REG_KEY_DONT_SILENT_FAIL: CLEAR
        REG_KEY_RECURSE_FLAG: CLEAR

The operation completed successfully.

Wenn die Überwachung für einen Schlüssel aktiviert wird, der virtualisiert wird, wird ein neues Virtualisierungsüberwachungsereignis generiert, um anzugeben, dass der Schlüssel virtualisiert wird (zusätzlich zu den üblichen Überwachungsereignissen). Administratoren können diese Informationen verwenden, um die status der Virtualisierung auf ihren Systemen zu überwachen.

Erste Schritte mit der Benutzerkontensteuerung

Grundlegendes und Konfigurieren der Benutzerkontensteuerung

Bewährte Methoden und Richtlinien für Entwickler für Anwendungen in einer Umgebung mit den geringsten Berechtigungen