Reflexe registru

[Informace v tomto tématu platí pro Systém Windows Server 2008, Windows Vista, Windows Server 2003 a Windows XP. Počínaje Windows 7 a Windows Serverem 2008 R2 už WOW64 nepoužívá reflexi registru a dříve zrcadlené klíče se místo toho sdílejí. Další informace naleznete v tématu klíče registru ovlivněné wow64.]

Přesměrovač registru izoluje 32bitové a 64bitové aplikace tím, že poskytuje samostatná logická zobrazení určitých částí registru na WOW64. Hodnoty některých klíčů registru však musí být stejné v 32bitovém i 64bitovém zobrazení.

Proces reflexe registru kopíruje klíče registru a hodnoty mezi dvěma zobrazeními registru, aby byly synchronizované. Každé zobrazení má samostatnou fyzickou kopii každého zrcadleného klíče registru, jednu pro 32bitové zobrazení registru a druhou pro 64bitové zobrazení registru.

Zrcadlený klíč se zkopíruje při zavření klíče voláním RegCloseKey. Všimněte si, že to vede k možnému konfliktu časování: pokud klíč reflektu změní více než jeden proces, poslední RegCloseKey volání určuje konečnou hodnotu klíče.

Reflektor kopíruje aktivační data modelu COM pro místní servery mezi zobrazeními, ale nekopíruje procesní data, protože v 64bitovém systému Windows není povoleno kombinování dat v procesu 32/64.

Reflexe není povolená pro sdílené klíče registru ani pro klíče registru, které nejsou přesměrovány. Například reflexe není pro klíč HKEY_LOCAL_MACHINE\System povolená. Seznam klíčů registru, které jsou přesměrované, sdílené nebo reflektované, naleznete v tématu Klíče registru ovlivněné wow64.

Reflexe registru používá zásadu "last writer wins", jak je znázorněno v následujícím příkladu:

  • Po čisté instalaci 64bitového systému Windows se zaregistruje 64bitová Wordpad.exe pro zpracování .doc souborů. Reflektor zkopíruje registraci .doc z 64bitového zobrazení registru do 32bitového zobrazení registru.
  • Správce nainstaluje 32bitovou verzi Office, která zaregistruje 32bitovou Winword.exe pro zpracování .doc souborů v 32bitovém zobrazení registru. Reflektor registru zkopíruje tyto informace do 64bitového zobrazení registru, takže 32bitové i 64bitové aplikace spustí 32bitovou verzi Winword.exe pro soubory .doc.
  • Správce nainstaluje 64bitovou verzi Office, která zaregistruje 64bitovou Winword.exe pro zpracování .doc souborů v 64bitovém zobrazení registru. Reflektor registru tyto informace zkopíruje do 32bitového registru, takže 32bitové i 64bitové aplikace spustí 64bitovou verzi Winword.exe pro soubory .doc.

Proto se informace o přidružení souboru zachovají pro naposledy nainstalovanou aplikaci.

Může být užitečné pro 32bitové a 64bitové aplikace ke sdílení konkrétních hodnot klíče registru, které jsou obvykle zapsány do samostatných zobrazení registru. Například 32bitový server OLE, který může obsluhovat požadavky z 32bitových i 64bitových klientů, může zpřístupnit 32bitová data registru v 64bitovém zobrazení systémového registru.

Když komponenta zapisuje data v systémovém registru, WOW64 analyzuje informace a v případě potřeby vytvoří kopii dat v alternativním zobrazení registru. Tento proces obvykle uchovává dvě samostatné fyzické kopie stejných klíčů registru v obou zobrazeních registru a označuje se jako reflexe registru nebo zrcadlení registru.

Většina klíčů pod kořenem tříd je v této kategorii. Aktualizace klíčů se projeví po dokončení aktualizace a popisovač klíče se zavře. V konkrétních případech se zápisy do klíče neprojeví, pokud má klíč určitou závislost bitů. Například 32bitový klíč InprocServer32 není relevantní pro 64bitové aplikace, takže klíč InprocServer32 se neprojeví v 64bitovém zobrazení registru. 64bitové aplikace ale můžou použít 32bitový klíč LocalServer32 a klíč LocalServer32 se projeví.

Pro HKEY_LOCAL_MACHINE\Software\Classes\CLSID a HKEY_CURRENT_USER\Software\Classes\CLSIDse projeví pouze identifikátory CLSI, které nezadávají InprocServer32 nebo InprocHandler32. Odrazí se pouze identifikátory CLSI LocalServer32, protože dochází k výpadku procesu a lze je aktivovat 32bitovými nebo 64bitovými aplikacemi. Identifikátory CLSID InProcServer32 se neprojeví, protože není možné načíst 32bitovou knihovnu DLL pro spuštění v 64bitovém procesu nebo 64bitovou knihovnu DLL pro spuštění v 32bitovém procesu.

Pro HKEY_LOCAL_MACHINE\Software\Classes\Appid a HKEY_CURRENT_USER\Software\Classes\Appidse hodnoty registru DllSurrogate a DllSurrogateExecutable registru neprojeví, pokud je jejich hodnota prázdný řetězec.

Pokud chcete zakázat a povolit reflexi registru pro konkrétní reflektační klíč, použijte RegDisableReflectionKey a RegEnableReflectionKey funkce. Tyto funkce nemají vliv na klíče, které nejsou v seznamu reflektovaných klíčů dříve v tomto tématu. Aplikace by měly zakázat reflexi pouze pro klíče registru, které vytvářejí, a nepokoušají se zakázat reflexi pro předdefinované klíče, jako jsou HKEY_LOCAL_MACHINE nebo HKEY_CURRENT_USER. Pokud chcete zjistit, jestli jsou klíče v seznamu reflexe zakázané, použijte funkci RegQueryReflectionKey.

V operacích transakčního registru by se neměly používat reflektované klíče. Zápis na zrcadlené klíče během transakce může způsobit selhání transakce. Další informace o transakcích naleznete v tématu Správce transakcí jádra.

přesměrovače registru

Reflexe registru ve Windows

klíče registru ovlivněné WOW64