web-dev-qa-db-fra.com

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

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

comp mode

51
ulrichb

Le mode de compatibilité est atteint en utilisant des cales aussi appelées. Il y a un bon article sur TechNet décrivant comment ces travaux.

Les fichiers d'application Windows contiennent une table d'importation qui indique au chargeur d'application qui doit répondre aux besoins de l'application et qui fonctionne à partir d'eux. Un processus peut par exemple référence GetVersionEx dans le kernel32.dll. Lorsqu'un programme doit exécuter en mode de compatibilité, la cale est placée entre l'application et la cale remplace la fonction GetVersionEx _, de sorte que l'application n'appelle pas GetVersionEx de kernel32.dll mais le GetVersionEx dans la cale. Les fonctions au shimmed implémentent ensuite le comportement des précédentes versions Windows. GetVersionEx est un échantillon facile, chaque version de Windows renvoie ses propres numéros de version en GetVersionEx, donc lors de la simulation d'une vieille fenêtre la fonction GetVersionEx ne renvoie pas les numéros de version Windows 7 mais Par exemple, les numéros de version Windows XP. Pour que l'application va croire qu'il s'exécute sur Windows XP.

Il y a également eu d'autres modifications de la version Windows à la version Windows. Dans les versions plus anciennes, par exemple, si un programme chargé une DLL, le chemin de recherche pour le DLL a également inclus le répertoire actuel. Ceci est un problème de sécurité, de sorte que les versions de Windows par défaut ne sont pas. Rechercher dans le répertoire actuel. Avec la cale appropriée, vous pouvez simuler l'ancien comportement.

Depuis que les cales ne sont qu'une couche entre l'application et l'API Windows A API, une cale peut simplement faire ce que l'application pourrait se faire. La cale ne peut pas être utilisée par exemple pour contourner les fichiers protégés contre l'UAC ou l'accès.

Si vous voulez en savoir plus, voici quelques liens que vous pourriez trouver intéressants:

En particulier, la boîte à outils de compatibilité des applications Microsoft mérite un coup d'œil. Cet outil vous donne une vue d'ensemble sur les applications avec des problèmes connus, toutes les correctifs et modes de compatibilité disponibles et les correctifs sont appliqués à chaque application.

34
Werner Henze

Je pense que beaucoup de choses différentes se produisent. Un exemple simple est qu'un programme peut vérifier votre version Windows, mais obtenir une confusion par la valeur de retour d'un nouveau système d'exploitation. Ainsi, utiliser le mode de compatibilité indiquerait que Windows signaler une mauvaise version. Raymond Chen mentionne plus de choses: http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx#4559

6
akid