Wie funktioniert der Kompatibilitätsmodus in Windows intern?
Wie funktioniert der Kompatibilitätsmodus in Windows intern?
Antworten:
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 GetVersionEx
in 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 GetVersionEx
Funktion, sodass die Anwendung nicht GetVersionEx
von, kernel32.dll
sondern GetVersionEx
vom Shim aus aufruft. Die Shimmed-Funktionen implementieren dann das Verhalten früherer Windows-Versionen. GetVersionEx
Ist ein einfaches Beispiel, gibt jede Windows-Version ihre eigenen Versionsnummern in zurück GetVersionEx
, also beim Fälschen eines alten Windows dieGetVersionEx
Funktion 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.
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
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 Settings
wird übersetzt, C:\Users\<user>\Documents
wenn unter Windows 7 ein Programm im XP-Kompatibilitätsmodus ausgeführt wird.
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.