Registrierungsreflektion
[Die Informationen in diesem Thema gelten für Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP. Ab Windows 7 und Windows Server 2008 R2 verwendet WOW64 keine Registrierungsreflektion mehr, und früher reflektierte Schlüssel werden stattdessen freigegeben. Weitere Informationen finden Sie unter Registrierungsschlüssel, die von WOW64betroffen sind.]
Der Registrierungsumleitung isoliert 32-Bit- und 64-Bit-Anwendungen, indem separate logische Ansichten bestimmter Teile der Registrierung auf WOW64 bereitgestellt werden. Die Werte einiger Registrierungsschlüssel müssen jedoch in den 32-Bit- und 64-Bit-Ansichten identisch sein.
Der Prozess der Registrierungsreflektion kopiert Registrierungsschlüssel und Werte zwischen zwei Registrierungsansichten, um sie synchronisiert zu halten. Jede Ansicht verfügt über eine separate physische Kopie jedes reflektierten Registrierungsschlüssels, eine für die 32-Bit-Registrierungsansicht und die andere für die 64-Bit-Registrierungsansicht.
Ein reflektierter Schlüssel wird kopiert, wenn ein Schlüssel geschlossen wird, indem RegCloseKeyaufgerufen wird. Beachten Sie, dass dies zu einer möglichen Racebedingung führt: Wenn mehr als ein Prozess den reflektierten Schlüssel ändert, bestimmt der letzte RegCloseKey Aufruf den endgültigen Wert des Schlüssels.
Der Reflektor kopiert COM-Aktivierungsdaten für lokale Server zwischen den Ansichten, kopiert jedoch keine In-Process-Daten, da die 32/64-In-Process-Datenmischung unter 64-Bit-Windows nicht zulässig ist.
Spiegelung ist nicht für freigegebene Registrierungsschlüssel oder für Registrierungsschlüssel aktiviert, die nicht umgeleitet werden. Die Spiegelung ist z. B. für die HKEY_LOCAL_MACHINE\System-Taste nicht aktiviert. Eine Liste der Registrierungsschlüssel, die umgeleitet, freigegeben oder widergespiegelt werden, finden Sie unter Registrierungsschlüssel, die von WOW64betroffen sind.
Die Registrierungsreflektion verwendet eine Richtlinie für "Last Writer wins", wie im folgenden Beispiel veranschaulicht:
- Nach einer Neuinstallation von 64-Bit-Windows wird 64-Bit-Wordpad.exe registriert, um .doc Dateien zu verarbeiten. Der Reflektor kopiert die .doc Registrierung aus der 64-Bit-Registrierungsansicht in die 32-Bit-Registrierungsansicht.
- Ein Administrator installiert 32-Bit-Office, das 32-Bit-Winword.exe registriert, um .doc Dateien in der 32-Bit-Registrierungsansicht zu verarbeiten. Der Registrierungsreflektor kopiert diese Informationen in die 64-Bit-Registrierungsansicht, sodass sowohl 32-Bit- als auch 64-Bit-Anwendungen die 32-Bit-Version von Winword.exe für .doc Dateien starten.
- Ein Administrator installiert 64-Bit-Office, das 64-Bit-Winword.exe registriert, um .doc Dateien in der 64-Bit-Registrierungsansicht zu verarbeiten. Der Registrierungsreflektor kopiert diese Informationen in die 32-Bit-Registrierung, sodass sowohl 32-Bit- als auch 64-Bit-Anwendungen die 64-Bit-Version von Winword.exe für .doc Dateien starten.
Daher werden die Dateizuordnungsinformationen für die zuletzt installierte Anwendung beibehalten.
Es kann nützlich sein, 32-Bit- und 64-Bit-Anwendungen bestimmte Registrierungsschlüsselwerte freizugeben, die normalerweise in separate Registrierungsansichten geschrieben werden. Beispielsweise könnte ein 32-Bit-OLE-Server, der Anforderungen sowohl von 32-Bit- als auch von 64-Bit-Clients verarbeiten kann, seine 32-Bit-Registrierungsdaten in der 64-Bit-Ansicht der Systemregistrierung verfügbar machen.
Wenn eine Komponente Daten in die Systemregistrierung schreibt, analysiert WOW64 die Informationen und erstellt bei Bedarf eine Kopie der Daten in der alternativen Ansicht der Registrierung. In der Regel behält dieser Vorgang zwei separate physische Kopien derselben Registrierungsschlüssel in beiden Ansichten in der Registrierung bei und wird als Registrierungsreflektion oder Registrierungsspiegelung bezeichnet.
Die meisten Schlüssel unter dem Klassenstamm befinden sich in dieser Kategorie. Aktualisierungen der Schlüssel werden angezeigt, wenn das Update abgeschlossen ist und das Handle für den Schlüssel geschlossen wird. In bestimmten Fällen werden Schreibvorgänge in einen Schlüssel nicht widergespiegelt, wenn der Schlüssel eine Bitanzahlabhängigkeit aufweist. Beispielsweise ist der 32-Bit-InprocServer32-Schlüssel für 64-Bit-Anwendungen nicht relevant, sodass der Schlüssel "InprocServer32" nicht in der 64-Bit-Registrierungsansicht widergespiegelt wird. 64-Bit-Anwendungen können jedoch den 32-Bit-LocalServer32-Schlüssel verwenden, und der LocalServer32-Schlüssel wird widergespiegelt.
Für HKEY_LOCAL_MACHINE\Software\Classes\CLSID und HKEY_CURRENT_USER\Software\Classes\CLSIDwerden nur CLSIDs angezeigt, die inprocServer32 oder InprocHandler32 nicht angeben. Nur LocalServer32 CLSIDs werden angezeigt, da sie nicht verarbeitet werden und von 32- oder 64-Bit-Anwendungen aktiviert werden können. InProcServer32 CLSIDs werden nicht widergespiegelt, da es nicht möglich ist, eine 32-Bit-DLL für die Ausführung in einem 64-Bit-Prozess oder eine 64-Bit-DLL für die Ausführung in einem 32-Bit-Prozess zu laden.
Bei HKEY_LOCAL_MACHINE\Software\Classes\Appid und HKEY_CURRENT_USER\Software\Classes\Appidwerden die DllSurrogate- und DllSurrogateExecutable Registrierungswerte nicht angezeigt, wenn ihr Wert eine leere Zeichenfolge ist.
Verwenden Sie die RegDisableReflectionKey- und RegEnableReflectionKey--Funktionen, um die Registrierungsreflektion für einen bestimmten reflektierten Schlüssel zu deaktivieren und zu aktivieren. Diese Funktionen wirken sich nicht auf Schlüssel aus, die sich nicht in der Liste der reflektierten Schlüssel weiter oben in diesem Thema befinden. Anwendungen sollten die Spiegelung nur für die von ihnen erstellten Registrierungsschlüssel deaktivieren und nicht versuchen, die Spiegelung für die vordefinierten Schlüssel wie HKEY_LOCAL_MACHINE oder HKEY_CURRENT_USERzu deaktivieren. Um festzustellen, ob die Schlüssel in der Spiegelungsliste deaktiviert wurden, verwenden Sie die RegQueryReflectionKey-Funktion.
Reflektierte Schlüssel sollten nicht in Transaktionsregistrierungsvorgängen verwendet werden. Das Schreiben in reflektierte Schlüssel während einer Transaktion kann dazu führen, dass die Transaktion fehlschlägt. Weitere Informationen zu Transaktionen finden Sie unter Kernel Transaction Manager.
Verwandte Themen