Wie funktioniert der „Kompatibilitätsmodus“ in Windows?

Antworten:

31

Der Kompatibilitätsmodus wird mit so genannten Shims erreicht. Es gibt einen guten Artikel im TechNet, der beschreibt, wie diese funktionieren.

Windows-Anwendungsdateien enthalten eine Importtabelle, die dem Anwendungsladeprogramm mitteilt, welche DLLs die Anwendung benötigt und welche Funktionen sie von ihnen verwendet. Ein Prozess könnte beispielsweise GetVersionExin der referenzieren kernel32.dll. Wenn ein Programm im Kompatibilitätsmodus ausgeführt werden soll, wird das Shim zwischen die Anwendung gestellt und das Shim ersetzt die GetVersionExFunktion, sodass die Anwendung nicht GetVersionExvon, kernel32.dllsondern GetVersionExvom Shim aus aufruft. Die Shimmed-Funktionen implementieren dann das Verhalten früherer Windows-Versionen. GetVersionExIst ein einfaches Beispiel, gibt jede Windows-Version ihre eigenen Versionsnummern in zurück GetVersionEx, also beim Fälschen eines alten Windows dieGetVersionExFunktion gibt jetzt nicht die Windows 7-Versionsnummern zurück, sondern beispielsweise die Windows XP-Versionsnummern. Die Anwendung wird also glauben, dass sie unter Windows XP ausgeführt wird.

Es gab auch einige andere Änderungen von der Windows-Version zur Windows-Version. Wenn beispielsweise in älteren Versionen ein Programm eine DLL geladen hat, enthielt der Suchpfad für die DLL auch das aktuelle Verzeichnis. Dies ist ein Sicherheitsproblem, sodass neuere Windows-Versionen standardmäßig nicht im aktuellen Verzeichnis suchen. Mit der richtigen Unterlegscheibe können Sie das alte Verhalten simulieren.

Da Shims nur eine Schicht zwischen der Anwendung und der Windows-API sind, kann ein Shim genau das tun, was die Anwendung selbst tun könnte. Das Shim kann beispielsweise nicht verwendet werden, um die Benutzerkontensteuerung zu umgehen oder auf geschützte Dateien zuzugreifen.

Wenn Sie mehr wissen möchten, finden Sie hier einige interessante Links:

Besonders das Microsoft Application Compatibility Toolkit ist einen Blick wert. Mit diesem Tool erhalten Sie einen Überblick über die Anwendungen mit bekannten Problemen, über alle verfügbaren Kompatibilitätskorrekturen und -modi sowie darüber, welche Korrekturen auf die einzelnen Anwendungen angewendet werden.

Werner Henze
quelle
1
Sie haben meine Neugierde mit konkreten Beispielen erfolgreich befriedigt. Danke!
Kale Muscarella
6

Ich denke viele verschiedene Dinge passieren. Ein einfaches Beispiel ist, dass ein Programm möglicherweise Ihre Windows-Version überprüft, aber durch den Rückgabewert eines neuen Betriebssystems verwirrt wird. Wenn Sie also den Kompatibilitätsmodus verwenden, wird Windows angewiesen, eine falsche Version zu melden. Raymond Chen erwähnt einige weitere Dinge: http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx#45590

ein Kind
quelle
4

Mein Wissen über den Kompatibilitätsmodus ist, dass mehrere Windows-Systemaufrufe das Programm belügen.

Ein naheliegendes Beispiel sind die Funktionen GetVersionEx und GetVersion, die die angegebene Windows-Version anstelle der realen melden.

Alte Dateipfade werden auch automatisch übersetzt, wenn ein Programm im Kompatibilitätsmodus auf eine Datei in bekannten Systemordnern verweist. Zum Beispiel C:\Documents and Settingswird übersetzt, C:\Users\<user>\Documents wenn unter Windows 7 ein Programm im XP-Kompatibilitätsmodus ausgeführt wird.

Harrymc
quelle
-5

In diesem Artikel wird dies gut erklärt.

http://arstechnica.com/information-technology/2010/01/windows-xp-mode/

Mit Windows 7 bietet Redmond jedoch eine Lösung für das Problem: den Windows XP-Modus. Der Windows XP-Modus verwendet Virtualisierungstechnologie, um Anwendungen, die auf einer virtualisierten Kopie von Windows XP ausgeführt werden, im Windows 7-Startmenü und auf dem Windows 7-Desktop anzuzeigen.

whoacowboy
quelle
4
Windows XP-Modus! = Kompatibilitätsmodus
Kevin Mark