Wirtualizacja rejestru
wirtualizacji rejestru to technologia zgodności aplikacji, która umożliwia operacje zapisu rejestru, które mają globalny wpływ na przekierowywanie do lokalizacji poszczególnych użytkowników. To przekierowanie jest niewidoczne dla aplikacji odczytu z rejestru lub zapisywania w rejestrze. Jest obsługiwany począwszy od systemu Windows Vista.
Ta forma wirtualizacji jest tymczasową technologią zgodności aplikacji; Firma Microsoft zamierza usunąć go z przyszłych wersji systemu operacyjnego Windows, ponieważ więcej aplikacji jest zgodnych z systemem Windows Vista i nowszymi wersjami systemu Windows. Dlatego ważne jest, aby aplikacja nie była zależna od zachowania wirtualizacji rejestru w systemie.
Wirtualizacja jest przeznaczona tylko do zapewnienia zgodności z istniejącymi aplikacjami. Aplikacje przeznaczone dla systemu Windows Vista i nowszych wersji systemu Windows nie powinny zapisywać w poufnych obszarach systemu ani nie powinny polegać na wirtualizacji w celu rozwiązania problemów. Podczas aktualizowania istniejącego kodu do uruchamiania w systemie Windows Vista i nowszych wersjach systemu Windows deweloperzy powinni upewnić się, że aplikacje przechowują tylko dane w lokalizacjach poszczególnych użytkowników lub w lokalizacjach komputerów w %alluserprofile%, które prawidłowo korzystają z listy kontroli dostępu (ACL).
Aby uzyskać więcej informacji na temat tworzenia aplikacji zgodnych ze standardem UAC, zobacz Przewodnik dewelopera funkcji UAC.
Omówienie wirtualizacji
Przed systemem Windows Vista aplikacje były zwykle uruchamiane przez administratorów. W rezultacie aplikacje mogą swobodnie uzyskiwać dostęp do plików systemowych i kluczy rejestru. Gdyby te aplikacje były uruchamiane przez użytkownika standardowego, nie powiodłyby się z powodu niewystarczających praw dostępu. System Windows Vista i nowsze wersje systemu Windows zwiększają zgodność aplikacji dla tych aplikacji, automatycznie przekierowując te operacje. Na przykład operacje rejestru w magazynie globalnym (HKEY_LOCAL_MACHINE\Software) są przekierowywane do lokalizacji dla użytkownika w profilu użytkownika znanego jako magazyn wirtualny (HKEY_USERS\<identyfikator SID użytkownika>_Classes\VirtualStore\Machine\Software).
Wirtualizacja rejestru może być szeroko klasyfikowana w następujących typach:
-
Wirtualizacja rejestru open registry
-
Jeśli obiekt wywołujący nie ma dostępu do zapisu do klucza i próbuje otworzyć klucz, klucz jest otwierany z maksymalnym dozwolonym dostępem dla tego wywołującego.
Jeśli dla klucza ustawiono flagę REG_KEY_DONT_SILENT_FAIL, operacja zakończy się niepowodzeniem, a klucz nie zostanie otwarty. Aby uzyskać więcej informacji, zobacz "Kontrolowanie wirtualizacji rejestru" w dalszej części tego tematu.
-
wirtualizacji rejestru zapisu
-
Jeśli obiekt wywołujący nie ma dostępu do zapisu do klucza i próbuje zapisać wartość w nim lub utworzyć podklucz, wartość jest zapisywana w magazynie wirtualnym.
Jeśli na przykład ograniczony użytkownik próbuje zapisać wartość w następującym kluczu: HKEY_LOCAL_MACHINE\Software\AppKey1, wirtualizacja przekierowuje operację zapisu do HKEY_USERS\<Identyfikator SID użytkownika>_Classes\VirtualStore\Machine\Software\AppKey1.
-
wirtualizacji rejestru odczytu
-
Jeśli obiekt wywołujący odczytuje z klucza zwirtualizowanego, rejestr przedstawia scalony widok zarówno zwirtualizowanych wartości (z magazynu wirtualnego) jak i wartości innych niż wirtualne (z magazynu globalnego) do obiektu wywołującego.
Załóżmy na przykład, że HKEY_LOCAL_MACHINE\Software\AppKey1 zawiera dwie wartości V1 i V2 i że ograniczony użytkownik zapisuje wartość V3 do klucza. Gdy użytkownik próbuje odczytać wartości z tego klucza, scalony widok zawiera wartości V1 i V2 z magazynu globalnego i wartość V3 z magazynu wirtualnego.
Należy pamiętać, że wartości wirtualne mają pierwszeństwo przed wartościami globalnymi, gdy są obecne. W powyższym przykładzie, nawet jeśli magazyn globalny miał wartość V3 w tym kluczu, wartość V3 nadal będzie zwracana do obiektu wywołującego z magazynu wirtualnego. Gdyby wersja 3 została usunięta ze sklepu wirtualnego, wersja V3 zostanie zwrócona z magazynu globalnego. Innymi słowy, jeśli wersja V3 ma zostać usunięta z HKEY_USERS\<identyfikator SID użytkownika>_Classes\VirtualStore\Machine\Software\AppKey1, ale HKEY_LOCAL_MACHINE\Software\AppKey1 miał wartość V3, ta wartość zostanie zwrócona z magazynu globalnego.
Zakres wirtualizacji rejestru
Wirtualizacja rejestru jest włączona tylko dla następujących elementów:
- 32-bitowe procesy interaktywne.
- Klucze w HKEY_LOCAL_MACHINE\Software.
- Klucze, do których administrator może zapisywać dane. (Jeśli administrator nie może zapisać klucza, aplikacja nie powiodłaby się w poprzednich wersjach systemu Windows, nawet jeśli została uruchomiona przez administratora).
Wirtualizacja rejestru jest wyłączona dla następujących elementów:
Procesy 64-bitowe.
Procesy, które nie są interaktywne, takie jak usługi.
Należy pamiętać, że użycie rejestru jako mechanizmu komunikacji między procesami (IPC) między usługą (lub innym procesem, który nie ma włączonej wirtualizacji), a aplikacja nie będzie działać poprawnie, jeśli klucz jest zwirtualizowany. Na przykład jeśli usługa antywirusowej aktualizuje swoje pliki sygnatur na podstawie wartości ustawionej przez aplikację, usługa nigdy nie zaktualizuje plików podpisu, ponieważ usługa odczytuje z globalnego magazynu, ale aplikacja zapisuje w magazynie wirtualnym.
Procesy, które personifikują użytkownika. Jeśli proces podejmie próbę wykonania operacji podczas personifikacji użytkownika, ta operacja nie zostanie zwirtualizowana.
Procesy trybu jądra, takie jak sterowniki.
Procesy, które zażądały ExecutionLevel określone w ich manifestach.
Klucze i podklucze HKEY_LOCAL_MACHINE\Software\Classes, HKEY_LOCAL_MACHINE\Software\Microsoft\Windowsi HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT.
Kontrolowanie wirtualizacji rejestru
Oprócz kontrolowania wirtualizacji na poziomie aplikacji przy użyciu requestedExecutionLevel w manifeście administrator może włączyć lub wyłączyć wirtualizację dla kluczy w HKEY_LOCAL_MACHINE\Software. W tym celu użyj opcji FLAGS narzędzia wiersza polecenia Reg.exe z flagami wymienionymi w poniższej tabeli.
Flaga | Znaczenie |
---|---|
REG_KEY_DONT_SILENT_FAIL | Ta flaga wyłącza otwartą wirtualizację rejestru. Jeśli ta flaga jest ustawiona, a operacja otwierania zakończy się niepowodzeniem w kluczu z włączoną wirtualizacją, rejestr nie podejmie próby ponownego otwarcia klucza. Jeśli ta flaga jest jasna, rejestr próbuje ponownie otworzyć klucz przy użyciu MAXIMUM_ALLOWED dostępu zamiast żądanego dostępu. |
REG_KEY_DONT_VIRTUALIZE | Ta flaga wyłącza wirtualizację rejestru zapisu. Jeśli ta flaga jest ustawiona, a operacja tworzenia klucza lub ustawiania wartości zakończy się niepowodzeniem, ponieważ obiekt wywołujący nie ma wystarczającego prawa dostępu do klucza nadrzędnego, rejestr zakończy się niepowodzeniem operacji. Jeśli ta flaga jest jasna, rejestr próbuje zapisać klucz lub wartość w magazynie wirtualnym. Obiekt wywołujący musi mieć KEY_READ bezpośrednio na kluczu nadrzędnym. |
REG_KEY_RECURSE_FLAG | Jeśli ta flaga jest ustawiona, flagi wirtualizacji rejestru są propagowane z klucza nadrzędnego. Jeśli ta flaga jest jasna, flagi wirtualizacji rejestru nie są propagowane. Zmiana tej flagi dotyczy tylko nowych kluczy malejących utworzonych po zmianie flagi. Nie ustawia ani nie usuwa tych flag dla istniejących kluczy malejących. |
W poniższym przykładzie pokazano użycie narzędzia wiersza polecenia Reg.exe z opcją FLAGS w celu wykonania zapytania o stan flag wirtualizacji dla klucza.
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.
Zawsze, gdy inspekcja jest włączona na kluczu, który jest zwirtualizowany, jest generowane nowe zdarzenie inspekcji wirtualizacji, aby wskazać, że klucz jest zwirtualizowany (oprócz zwykłych zdarzeń inspekcji). Administratorzy mogą używać tych informacji do monitorowania stanu wirtualizacji w swoich systemach.
Tematy pokrewne