Registrierungsvirtualisierung
Registrierungsvirtualisierung ist eine Anwendungskompatibilitätstechnologie, die Registrierungsschreibvorgänge ermöglicht, die globale Auswirkungen haben, an Benutzerspeicherorte umgeleitet zu werden. Diese Umleitung ist transparent für Anwendungen, die aus der Registrierung lesen oder schreiben. Sie wird ab Windows Vista unterstützt.
Diese Form der Virtualisierung ist eine Interim-Anwendungskompatibilitätstechnologie; Microsoft beabsichtigt, sie aus zukünftigen Versionen des Windows-Betriebssystems zu entfernen, da weitere 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.
Die Virtualisierung soll nur Kompatibilität für vorhandene Anwendungen bereitstellen. Anwendungen, die für Windows Vista und höhere Versionen von Windows entwickelt wurden, sollten nicht in sensible Systembereiche schreiben, oder sie sollten sich nicht auf die Virtualisierung verlassen, um Probleme zu beheben. Wenn Sie vorhandenen Code für die Ausführung unter Windows Vista und höheren Versionen von Windows aktualisieren, sollten Entwickler sicherstellen, dass Anwendungen nur Daten an Benutzerspeicherorten oder an Computerspeicherorten innerhalb %alluserprofile% speichern, die eine Zugriffssteuerungsliste (Access Control List, ACL) ordnungsgemäß verwenden.
Weitere Informationen zum Erstellen von UAC-kompatiblen Anwendungen finden Sie im UAC-Entwicklerhandbuch.
Virtualisierungsübersicht
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 wurden, 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. Registrierungsvorgänge an den globalen Speicher (HKEY_LOCAL_MACHINE\Software) werden beispielsweise an einen Benutzerspeicherort innerhalb des Profils des Benutzers umgeleitet, der als virtuellen Speicher (HKEY_USERS\<Benutzer-SID>_Classes\VirtualStore\Machine\Software) bezeichnet wird.
Die Registrierungsvirtualisierung kann allgemein in die folgenden Typen unterteilt werden:
-
Open Registry Virtualization
-
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 Anrufer geöffnet.
Wenn das kennzeichen REG_KEY_DONT_SILENT_FAIL 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".
-
Schreiben der Registrierungsvirtualisierung
-
Wenn der Aufrufer keinen Schreibzugriff auf einen Schlüssel hat und versucht, einen Wert darin 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\<Benutzer-SID>_Classes\VirtualStore\Machine\Software\AppKey1um.
-
Lesen der Registrierungsvirtualisierung
-
Wenn der Aufrufer aus einem virtualisierten Schlüssel liest, stellt die Registrierung eine zusammengeführte Ansicht der virtualisierten Werte (aus dem virtuellen Speicher) und der nicht virtuellen Werte (aus dem globalen Speicher) für den Aufrufer dar.
Angenommen, HKEY_LOCAL_MACHINE\Software\AppKey1- zwei Werte V1 und V2 enthält und 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 werte V1 und V2 aus dem globalen Speicher und dem Wert V3 aus dem virtuellen Speicher.
Beachten Sie, dass virtuelle Werte vorrang vor globalen Werten haben, wenn vorhanden. Selbst wenn der globale Speicher im obigen Beispiel den Wert V3 unter diesem Schlüssel hatte, würde der Wert V3 weiterhin vom virtuellen Speicher an den Aufrufer zurückgegeben. Wenn V3 aus dem virtuellen Speicher gelöscht werden soll, wird V3 aus dem globalen Speicher zurückgegeben. Anders ausgedrückt: Wenn V3 aus HKEY_USERS\<Benutzer-SID>_Classes\VirtualStore\Machine\Software\AppKey1 gelöscht werden soll, aber HKEY_LOCAL_MACHINE\Software\AppKey1 einen Wert V3 aufweist, wird dieser Wert aus dem globalen Speicher zurückgegeben.
Registrierungsvirtualisierungsbereich
Die Registrierungsvirtualisierung ist nur für Folgendes aktiviert:
- Interaktive 32-Bit-Prozesse.
- Tasten 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 in 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 Inter-Process Communication (IPC)-Mechanismus zwischen einem Dienst (oder einem anderen Prozess, der keine Virtualisierung aktiviert hat) und eine Anwendung nicht ordnungsgemäß funktioniert, wenn der Schlüssel virtualisiert ist. Wenn beispielsweise ein Antivirendienst seine Signaturdateien basierend auf einem von einer Anwendung festgelegten Wert 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 einen Benutzer imitieren. Wenn ein Prozess beim Identitätswechsel eines Benutzers versucht, wird dieser Vorgang nicht virtualisiert.
Kernelmodusprozesse wie Treiber.
Prozesse, die requestedExecutionLevel in ihren Manifesten angegeben 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
Zusätzlich zur Steuerung der Virtualisierung auf Anwendungsebene mithilfe requestedExecutionLevel- im Manifest kann ein Administrator die Virtualisierung pro Schlüsselbasis für Schlüssel in HKEY_LOCAL_MACHINE\Softwareaktivieren oder deaktivieren. Verwenden Sie hierzu die Option Reg.exe Befehlszeilenprogramm FLAGS mit den Flags, die in der folgenden Tabelle aufgeführt sind.
Flagge | Bedeutung |
---|---|
REG_KEY_DONT_SILENT_FAIL | Mit diesem Flag wird die Offene Registrierungsvirtualisierung deaktiviert. Wenn dieses Flag festgelegt ist und bei einem geöffneten Vorgang bei einem Schlüssel mit aktivierter Virtualisierung ein Fehler auftritt, versucht die Registrierung nicht, den Schlüssel erneut zu öffnen. Wenn dieses Kennzeichen deaktiviert ist, versucht die Registrierung, den Schlüssel mit MAXIMUM_ALLOWED Zugriff anstelle des angeforderten Zugriffs erneut zu öffnen. |
REG_KEY_DONT_VIRTUALIZE | Mit diesem Flag wird die Schreibregistrierungsvirtualisierung deaktiviert. Wenn dieses Kennzeichen festgelegt ist und ein Erstellungsschlüssel- oder Wertvorgang fehlschlägt, da der Aufrufer nicht über ausreichende Zugriffsberechtigungen auf den übergeordneten Schlüssel verfügt, schlägt die Registrierung den Vorgang fehl. Wenn dieses Kennzeichen deaktiviert ist, versucht die Registrierung, den Schlüssel oder Wert im virtuellen Speicher zu schreiben. Der Aufrufer muss die KEY_READ rechts auf der übergeordneten Taste haben. |
REG_KEY_RECURSE_FLAG | Wenn dieses Flag festgelegt ist, werden Registrierungsvirtualisierungskennzeichnungen vom übergeordneten Schlüssel weitergegeben. Wenn dieses Kennzeichen eindeutig ist, werden Registrierungsvirtualisierungskennzeichnungen nicht weitergegeben. Das Ändern dieses Kennzeichens wirkt sich nur auf neue untergeordnete Schlüssel aus, die nach der Änderung des Flags erstellt wurden. Sie legt diese Kennzeichen nicht für vorhandene absteigender Schlüssel fest oder löscht sie nicht. |
Das folgende Beispiel zeigt die Verwendung des Befehlszeilenprogramms Reg.exe mit der FLAGS-Option, um den Status der Virtualisierungskennzeichnungen 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 auf einem Schlüssel aktiviert ist, 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 den Status der Virtualisierung auf ihren Systemen zu überwachen.
Verwandte Themen