Comment fonctionne le «mode de compatibilité» dans Windows?

Réponses:

31

Le mode de compatibilité est obtenu à l'aide de cales. Un bon article sur TechNet décrit leur fonctionnement.

Les fichiers d'application Windows contiennent une table d'importation qui indique au chargeur d'application les DLL dont l'application a besoin et les fonctions qu'elle utilise depuis celles-ci. Un processus peut par exemple faire référence GetVersionExà la kernel32.dll. Lorsqu'un programme doit être exécuté en mode de compatibilité, le shim est placé entre l'application et le shim remplace la GetVersionExfonction, de sorte que l'application n'appelle pas à GetVersionExpartir de kernel32.dllmais GetVersionExdans le shim. Les fonctions shimmed implémentent ensuite le comportement des versions précédentes de Windows. GetVersionExest un exemple simple, chaque version de Windows renvoie ses propres numéros de version GetVersionEx. Ainsi, lorsque vous simulez un ancienGetVersionExfonction ne renvoie plus les numéros de version de Windows 7, mais par exemple les numéros de version de Windows XP. Donc, l'application va croire qu'elle fonctionne sous Windows XP.

Il y a également eu quelques autres changements de la version Windows à la version Windows. Dans les anciennes versions, par exemple, si un programme chargeait une DLL, le chemin de recherche de la DLL incluait également le répertoire en cours. Il s'agit d'un problème de sécurité. Par conséquent, les nouvelles versions de Windows ne recherchent pas par défaut dans le répertoire en cours. Avec la cale appropriée, vous pouvez simuler l'ancien comportement.

Les shim n'étant qu'une couche entre l'application et l'API Windows, ils peuvent faire ce que l'application peut faire elle-même. La cale ne peut pas être utilisée par exemple pour contourner le contrôle de compte d'utilisateur ou accéder aux fichiers protégés.

Si vous voulez en savoir plus, voici quelques liens qui pourraient vous intéresser:

En particulier, Microsoft Application Compatibility Toolkit vaut le détour. Cet outil vous donne un aperçu des applications présentant des problèmes connus, de tous les correctifs de compatibilité disponibles et des modes, ainsi que des correctifs appliqués à chaque application.

Werner Henze
la source
1
Vous avez réussi à satisfaire ma curiosité avec des exemples concrets. Je vous remercie!
Kale Muscarella
6

Je pense qu'il se passe beaucoup de choses différentes. Un exemple simple est qu'un programme peut vérifier votre version de Windows, mais être confus par la valeur de retour d'un nouveau système d'exploitation. Donc, utiliser le mode de compatibilité indiquerait à Windows de signaler une mauvaise version. Raymond Chen mentionne encore quelques choses: http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx#45590

un enfant
la source
4

D'après ce que je sais du mode de compatibilité, plusieurs appels système Windows sont liés au programme.

Un exemple évident est les fonctions GetVersionEx et GetVersion qui indiquent la version Windows spécifiée au lieu de la version réelle.

Les chemins d'accès aux fichiers de style ancien sont également automatiquement traduits lorsqu'un programme en mode de compatibilité fait référence à un fichier situé dans des dossiers système connus. Par exemple, il C:\Documents and Settingsest traduit en C:\Users\<user>\Documents exécutant sur Windows 7 un programme en mode de compatibilité XP.

harrymc
la source
-5

Cet article explique très bien le problème.

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

Avec Windows 7, cependant, Redmond a fourni une solution au problème: le mode Windows XP. Le mode Windows XP utilise la technologie de virtualisation pour permettre aux applications s'exécutant sur une copie virtualisée de Windows XP d'apparaître dans le menu Démarrer de Windows 7 et sur le bureau Windows 7.

whoacowboy
la source
4
Mode Windows XP! = Mode de compatibilité
Kevin Mark