Udostępnij za pośrednictwem


Odbicie rejestru

[Informacje w tym temacie dotyczą systemów Windows Server 2008, Windows Vista, Windows Server 2003 i Windows XP. Począwszy od systemów Windows 7 i Windows Server 2008 R2, WOW64 nie używa już odbicia rejestru i wcześniej odzwierciedlone klucze są współużytkowane. Aby uzyskać więcej informacji, zobacz Klucze rejestru, których dotyczyWOW64.

Przekierowanie rejestru izoluje aplikacje 32-bitowe i 64-bitowe, zapewniając oddzielne widoki logiczne niektórych części rejestru w usłudze WOW64. Jednak wartości niektórych kluczy rejestru muszą być takie same zarówno w widokach 32-bitowych, jak i 64-bitowych.

Proces odbicia rejestru kopiuje klucze rejestru i wartości między dwoma widokami rejestru, aby zachować ich synchronizację. Każdy widok ma oddzielną kopię fizyczną każdego odzwierciedlonego klucza rejestru, jedną dla widoku rejestru 32-bitowego i drugą dla widoku rejestru 64-bitowego.

Klucz odzwierciedlony jest kopiowany po zamknięciu klucza przez wywołanie RegCloseKey. Należy pamiętać, że powoduje to powstanie możliwego stanu wyścigu: jeśli więcej niż jeden proces zmieni odzwierciedlonego klucza, ostatni wywołanie RegCloseKey określa wartość końcową klucza.

Reflektor kopiuje dane aktywacji COM dla serwerów lokalnych między widokami, ale nie kopiuje danych w procesie, ponieważ 32/64 w procesie mieszanie danych nie jest dozwolone w 64-bitowym systemie Windows.

Odbicie nie jest włączone dla kluczy rejestru współużytkowanego ani kluczy rejestru, które nie są przekierowywane. Na przykład odbicie nie jest włączone dla klucza HKEY_LOCAL_MACHINE\System. Aby uzyskać listę kluczy rejestru, które są przekierowywane, współużytkowane lub odzwierciedlone, zobacz Klucze rejestru, których dotyczyWOW64.

Odbicie rejestru używa zasad "ostatniego zapisywania wygrywa", jak pokazano w poniższym przykładzie:

  • Po czystej instalacji 64-bitowej systemu Windows zarejestrowano 64-bitową Wordpad.exe do obsługi plików .doc. Reflektor kopiuje rejestrację .doc z widoku rejestru 64-bitowego do widoku rejestru 32-bitowego.
  • Administrator instaluje 32-bitowy pakiet Office, który rejestruje 32-bitowe Winword.exe do obsługi plików .doc w widoku rejestru 32-bitowego. Reflektor rejestru kopiuje te informacje do widoku rejestru 64-bitowego, więc zarówno 32-bitowe, jak i 64-bitowe aplikacje uruchamiają 32-bitową wersję Winword.exe dla plików .doc.
  • Administrator instaluje 64-bitowy pakiet Office, który rejestruje 64-bitowe Winword.exe do obsługi plików .doc w widoku rejestru 64-bitowego. Reflektor rejestru kopiuje te informacje do rejestru 32-bitowego, więc zarówno 32-bitowe, jak i 64-bitowe aplikacje uruchamiają 64-bitową wersję Winword.exe dla plików .doc.

W związku z tym informacje o skojarzeniu pliku są zachowywane dla ostatnio zainstalowanej aplikacji.

Może to być przydatne w przypadku aplikacji 32-bitowych i 64-bitowych do udostępniania określonych wartości kluczy rejestru, które są zwykle zapisywane w oddzielnych widokach rejestru. Na przykład 32-bitowy serwer OLE, który może obsługiwać żądania zarówno z klientów 32-bitowych, jak i 64-bitowych, może udostępnić 32-bitowe dane rejestru do 64-bitowego widoku rejestru systemowego.

Gdy składnik zapisuje dane w rejestrze systemowym, WOW64 analizuje informacje i tworzy kopię danych w alternatywnym widoku rejestru, jeśli jest to konieczne. Zazwyczaj ten proces przechowuje dwie oddzielne fizyczne kopie tych samych kluczy rejestru w obu widokach w rejestrze i jest nazywany odbiciem rejestru lub dublowaniem rejestru.

Większość kluczy w katalogu głównym klas należy do tej kategorii. Aktualizacje kluczy są odzwierciedlane po zakończeniu aktualizacji i zamknięciu dojścia do klucza. W określonych przypadkach zapisy w kluczu nie są odzwierciedlane, jeśli klucz ma pewną zależność bitowości. Na przykład 32-bitowy klucz InprocServer32 nie jest odpowiedni dla aplikacji 64-bitowych, więc klucz InprocServer32 nie jest odzwierciedlany w widoku rejestru 64-bitowego. Jednak aplikacje 64-bitowe mogą używać 32-bitowego klucza LocalServer32, a klucz LocalServer32 zostanie odzwierciedlony.

W przypadku HKEY_LOCAL_MACHINE\Software\Classes\CLSID i HKEY_CURRENT_USER\Software\Classes\CLSIDzostaną odzwierciedlone tylko identyfikatory CLSID, które nie określają inprocServer32 lub InprocHandler32. Odzwierciedlane są tylko identyfikatory CLSID Serwera Lokalnego32, ponieważ kończą się one procesem i mogą być aktywowane przez aplikacje 32- lub 64-bitowe. Identyfikatory CLSID serwera InProcServer32 nie są odzwierciedlane, ponieważ nie można załadować 32-bitowej biblioteki DLL do wykonania w procesie 64-bitowym lub 64-bitowej biblioteki DLL do wykonania w procesie 32-bitowym.

W przypadku HKEY_LOCAL_MACHINE\Software\Classes\Appid i HKEY_CURRENT_USER\Software\Classes\Appidwartości rejestru DllSurrogate i DllSurrogateExecutable wartości rejestru nie są odzwierciedlane, jeśli ich wartość jest pustym ciągiem.

Aby wyłączyć i włączyć odbicie rejestru dla określonego klucza odzwierciedlonego, użyj funkcji RegDisableReflectionKey i RegEnableReflectionKey. Te funkcje nie mają wpływu na klucze, które nie znajdują się na liście odzwierciedlone klucze wcześniej w tym temacie. Aplikacje powinny wyłączać odbicia tylko dla kluczy rejestru, które tworzą, i nie próbują wyłączyć odbicia dla wstępnie zdefiniowanych kluczy, takich jak HKEY_LOCAL_MACHINE lub HKEY_CURRENT_USER. Aby określić, czy klucze na liście odbicia zostały wyłączone, użyj funkcji RegQueryReflectionKey.

Klucze odzwierciedlone nie powinny być używane w operacjach rejestru transakcyjnego. Zapisywanie w celu odzwierciedlenia kluczy podczas transakcji może spowodować niepowodzenie transakcji. Aby uzyskać więcej informacji na temat transakcji, zobacz Menedżera transakcji jądra.

przekierowania rejestru

odbicie rejestru w systemie Windows

klucze rejestru, których dotyczy WOW64