54 votes

Comment le "Mode de compatibilité" dans Windows fonctionne-t-il?

Comment fonctionne le Mode de compatibilité dans Windows en interne ?

comp mode

38voto

Werner Henze Points 4659

Le mode de compatibilité est obtenu en utilisant ce qu'on appelle des shims. Il existe un bon article sur TechNet décrivant comment ils fonctionnent.

Les fichiers d'application Windows contiennent une table d'importation qui indique au chargeur d'application quels DLL l'application a besoin et quelles fonctions elle utilise à partir d'eux. Un processus pourrait par exemple faire référence à GetVersionEx dans le kernel32.dll. Lorsqu'un programme doit s'exécuter en mode de compatibilité, le shim est placé entre l'application et le shim remplace la fonction GetVersionEx, de sorte que l'application n'appelle pas GetVersionEx de kernel32.dll mais le GetVersionEx dans le shim. Les fonctions shimées implémentent ensuite le comportement des versions précédentes de Windows. GetVersionEx est un exemple simple, chaque version de Windows renvoie ses propres numéros de version dans GetVersionEx, donc en imitant un ancien Windows la fonction GetVersionEx ne renvoie plus les numéros de version de Windows 7 mais par exemple ceux de Windows XP. Ainsi l'application croira qu'elle s'exécute sous Windows XP.

Il y a également eu d'autres changements d'une version de Windows à une autre. Dans les anciennes versions par exemple, si un programme chargeait un DLL, le chemin de recherche du DLL incluait également le répertoire courant. C'est un problème de sécurité, donc les nouvelles versions de Windows par défaut ne recherchent pas dans le répertoire courant. Avec le bon shim, vous pouvez simuler l'ancien comportement.

Comme les shims ne sont qu'une couche entre l'application et l'API Windows, un shim ne peut faire que ce que l'application pourrait faire elle-même. Le shim ne peut pas être utilisé par exemple pour contourner l'UAC ou accéder à des fichiers protégés.

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

Particulièrement le Microsoft Application Compatibility Toolkit vaut le détour. Cet outil vous donne un aperçu des applications avec des problèmes connus, toutes les corrections de compatibilité disponibles et les modes et quelles corrections sont appliquées à chaque application.

6voto

Sosiska Points 141

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

4voto

harrymc Points 394411

Mes connaissances sur le Mode de compatibilité sont que cela entraîne plusieurs appels système Windows à mentir au programme.

Un exemple évident sont les fonctions GetVersionEx et GetVersion qui rapportent la version Windows spécifiée au lieu de la véritable.

Les anciens chemins d'accès aux fichiers sont également automatiquement traduits lorsqu'un programme en mode de compatibilité fait référence à un fichier dans des dossiers système bien connus. Par exemple C:\Documents and Settings est traduit en C:\Users\\Documents lors de l'exécution sur Windows 7 d'un programme en mode de compatibilité XP.

-5voto

Ralph Points 1

Cet article fait un bon travail pour l'expliquer.

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

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X