Jak działa tryb zgodności w systemie Windows?
Jak działa tryb zgodności w systemie Windows?
Odpowiedzi:
Tryb zgodności osiąga się za pomocą tak zwanych podkładek dystansowych. W TechNet znajduje się dobry artykuł opisujący ich działanie.
Pliki aplikacji Windows zawierają tabelę importu, która mówi modułowi ładującemu, jakie biblioteki DLL potrzebują aplikacja i jakie funkcje z nich korzysta. Proces może na przykład zawierać odwołanie GetVersionEx
w pliku kernel32.dll
. Gdy program będzie działać w trybie zgodności, a następnie podkładka jest umieszczany pomiędzy aplikacją i podkładki zastępuje GetVersionEx
funkcji, tak, że aplikacja nie wymaga GetVersionEx
od kernel32.dll
ale GetVersionEx
w podkładki. Funkcje shimmed następnie implementują zachowanie poprzednich wersji Windows. GetVersionEx
jest łatwą próbką, każda wersja systemu Windows zwraca własne numery wersji GetVersionEx
, więc przy fałszowaniu starego systemu WindowsGetVersionEx
funkcja nie zwraca teraz numerów wersji systemu Windows 7, ale na przykład numerów wersji systemu Windows XP. Aplikacja wierzy, że działa w systemie Windows XP.
Wprowadzono także inne zmiany z wersji Windows na wersję Windows. Na przykład w starszych wersjach, jeśli program załadował bibliotekę DLL, ścieżka wyszukiwania dla biblioteki DLL zawierała również bieżący katalog. Jest to problem z bezpieczeństwem, dlatego nowsze wersje systemu Windows domyślnie nie wyszukują w bieżącym katalogu. Przy odpowiednim podkładce można symulować stare zachowanie.
Ponieważ podkładki dystansowe to tylko warstwa między aplikacją a interfejsem API systemu Windows, podkładka może zrobić to, co aplikacja sama. Podkładki nie można na przykład użyć do obejścia UAC lub dostępu do chronionych plików.
Jeśli chcesz dowiedzieć się więcej, oto linki, które mogą Cię zainteresować:
Szczególnie warto sprawdzić zestaw narzędzi do sprawdzania zgodności aplikacji Microsoft. To narzędzie daje przegląd aplikacji ze znanymi problemami, wszystkich dostępnych poprawek i trybów zgodności oraz poprawek, które są stosowane do każdej aplikacji.
Myślę, że dzieje się wiele różnych rzeczy. Prostym przykładem jest to, że program może sprawdzić wersję systemu Windows, ale może się zdezorientować wartością zwracaną przez nowy system operacyjny. Dlatego użycie trybu zgodności poinformuje system Windows o zgłoszeniu niewłaściwej wersji. Raymond Chen wspomina o kilku innych rzeczach: http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx#45590
Moja wiedza na temat trybu zgodności polega na tym, że powoduje on, że program wywołuje kilka wywołań systemu Windows.
Jednym oczywistym przykładem są funkcje GetVersionEx i GetVersion, które zgłaszają określoną wersję systemu Windows zamiast prawdziwej.
Ścieżki plików w starym stylu są również automatycznie tłumaczone, gdy program w trybie zgodności odwołuje się do pliku w dobrze znanych folderach systemowych. Na przykład C:\Documents and Settings
jest tłumaczony C:\Users\<user>\Documents
na program w trybie zgodności z systemem Windows 7.
W tym artykule wyjaśniono to dobrze.
http://arstechnica.com/information-technology/2010/01/windows-xp-mode/
Jednak w systemie Windows 7 Redmond dostarczył rozwiązanie problemu: tryb Windows XP. Tryb Windows XP wykorzystuje technologię wirtualizacji, aby aplikacje działające na zwirtualizowanej kopii systemu Windows XP były wyświetlane w menu Start systemu Windows 7 i na pulpicie systemu Windows 7.