Jak działa „Tryb zgodności” w systemie Windows?


Odpowiedzi:


31

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 GetVersionExw 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 GetVersionExfunkcji, tak, że aplikacja nie wymaga GetVersionExod kernel32.dllale GetVersionExw podkładki. Funkcje shimmed następnie implementują zachowanie poprzednich wersji Windows. GetVersionExjest łatwą próbką, każda wersja systemu Windows zwraca własne numery wersji GetVersionEx, więc przy fałszowaniu starego systemu WindowsGetVersionExfunkcja 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.


1
Udało mi się zaspokoić moją ciekawość konkretnymi przykładami. Dziękuję Ci!
Kale Muscarella

6

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


4

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 Settingsjest tłumaczony C:\Users\<user>\Documents na program w trybie zgodności z systemem Windows 7.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.