Freigeben über


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 stattdessen werden früher reflektierte Schlüssel freigegeben. Weitere Informationen finden Sie unter Registrierungsschlüssel, die von WOW64 betroffen sind.]

Der Registrierungsumleitungsor isoliert 32-Bit- und 64-Bit-Anwendungen, indem er separate logische Ansichten bestimmter Teile der Registrierung auf WOW64 bereitstellt. Die Werte einiger Registrierungsschlüssel müssen jedoch sowohl in der 32-Bit- als auch in der 64-Bit-Ansicht identisch sein.

Der Prozess der Registrierungsreflektion kopiert Registrierungsschlüssel und -werte zwischen zwei Registrierungsansichten, um sie zu synchronisieren. 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 durch Aufrufen von RegCloseKey geschlossen 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, aber er kopiert keine prozessinternen Daten, da die 32/64-In-Process-Datenmischung unter 64-Bit-Windows nicht zulässig ist.

Die Reflektion ist für freigegebene Registrierungsschlüssel oder registrierungsschlüssel, die nicht umgeleitet werden, nicht aktiviert. Beispielsweise ist die Reflektion für den schlüsselHKEY_LOCAL_MACHINE\System nicht aktiviert. Eine Liste der Registrierungsschlüssel, die umgeleitet, freigegeben oder reflektiert werden, finden Sie unter Registrierungsschlüssel betroffen von WOW64.

Die Registrierungsreflektion verwendet die Richtlinie "Last Writer wins", wie im folgenden Beispiel veranschaulicht:

  • Nach einer sauber Installation von 64-Bit-Windows wird die 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.

Aus diesem Grund werden die Dateizuordnungsinformationen für die zuletzt installierte Anwendung beibehalten.

Es kann für 32-Bit- und 64-Bit-Anwendungen hilfreich sein, bestimmte Registrierungsschlüsselwerte gemeinsam zu nutzen, 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 für die 64-Bit-Ansicht der Systemregistrierung verfügbar machen.

Wenn eine Komponente Daten in die Systemregistrierung schreibt, analysiert WOW64 die Informationen und erstellt ggf. eine Kopie der Daten in der alternativen Ansicht der Registrierung. In der Regel behält dieser Prozess 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. Updates zu den Schlüsseln 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 angezeigt, wenn der Schlüssel eine Bitheitsabhängigkeit aufweist. Beispielsweise ist der 32-Bit-Schlüssel InprocServer32 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-Schlüssel LocalServer32 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 nicht InprocServer32 oder InprocHandler32 angeben. Nur LocalServer32 CLSIDs werden widergespiegelt, da sie out-of-process ausgeführt 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.

Für HKEY_LOCAL_MACHINE\Software\Classes\Appid und HKEY_CURRENT_USER\Software\Classes\Appidwerden die Registrierungswerte DllSurrogate und DllSurrogateExecutable nicht angezeigt, wenn ihr Wert eine leere Zeichenfolge ist.

Verwenden Sie zum Deaktivieren und Aktivieren der Registrierungsreflektion für einen bestimmten reflektierten Schlüssel die Funktionen RegDisableReflectionKey und RegEnableReflectionKey . Diese Funktionen wirken sich nicht auf Schlüssel aus, die nicht in der Liste der reflektierten Schlüssel weiter oben in diesem Thema enthalten sind. Anwendungen sollten die Reflektion nur für die Registrierungsschlüssel deaktivieren, die sie erstellen, und nicht versuchen, die Reflektion für die vordefinierten Schlüssel wie HKEY_LOCAL_MACHINE oder HKEY_CURRENT_USER zu deaktivieren. Verwenden Sie die RegQueryReflectionKey-Funktion , um festzustellen, ob die Schlüssel in der Reflektionsliste deaktiviert wurden.

Reflektierte Schlüssel sollten nicht in transaktionenten Registrierungsvorgä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.

Registrierungsumleitung

Registrierungsreflektion in Windows

Registrierungsschlüssel, die von WOW64 betroffen sind