¿Cómo funciona el "Modo de compatibilidad" en Windows?

Respuestas:

31

El modo de compatibilidad se logra utilizando las llamadas cuñas. Hay un buen artículo en TechNet que describe cómo funcionan.

Los archivos de aplicación de Windows contienen una tabla de importación que le dice al cargador de aplicaciones qué archivos DLL necesita la aplicación y qué funciones usa de ellos. Un proceso podría, por ejemplo, hacer referencia GetVersionExen kernel32.dll. Cuando un programa debe ejecutarse en modo de compatibilidad, la cuña se coloca entre la aplicación y la cuña reemplaza la GetVersionExfunción, de modo que la aplicación no llama GetVersionExdesde kernel32.dllsino GetVersionExa la cuña. Las funciones shimmed implementan el comportamiento de las versiones anteriores de Windows. GetVersionExes una muestra fácil, cada versión de Windows devuelve sus propios números de versión GetVersionEx, por lo que al falsificar una versión anterior de WindowsGetVersionExLa función ahora no devuelve los números de versión de Windows 7 sino, por ejemplo, los números de versión de Windows XP. Entonces la aplicación creerá que se está ejecutando en Windows XP.

También ha habido otros cambios de la versión de Windows a la versión de Windows. En versiones anteriores, por ejemplo, si un programa cargaba una DLL, la ruta de búsqueda de la DLL también incluía el directorio actual. Este es un problema de seguridad, por lo que las versiones más nuevas de Windows por defecto no buscan en el directorio actual. Con la cuña adecuada, puede simular el comportamiento anterior.

Como las cuñas son solo una capa entre la aplicación y la API de Windows, una cuña puede hacer lo que la aplicación podría hacer por sí misma. La cuña no se puede usar, por ejemplo, para eludir UAC o acceder a archivos protegidos.

Si quieres saber más, aquí hay algunos enlaces que te pueden interesar:

Especialmente el Kit de herramientas de compatibilidad de aplicaciones de Microsoft merece un vistazo. Esta herramienta le ofrece una visión general sobre las aplicaciones con problemas conocidos, todos los arreglos y modos de compatibilidad disponibles y qué arreglos se aplican a cada aplicación.

Werner Henze
fuente
1
Has satisfecho con éxito mi curiosidad con ejemplos concretos. ¡Gracias!
Kale Muscarella
6

Creo que suceden muchas cosas diferentes. Un ejemplo sencillo es que un programa puede verificar su versión de Windows, pero se confunde con el valor de retorno de un nuevo sistema operativo. Por lo tanto, usar el modo de compatibilidad le indicaría a Windows que informe una versión incorrecta. Raymond Chen menciona algunas cosas más: http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx#45590

un chico
fuente
4

Mi conocimiento del modo de compatibilidad es que hace que varias llamadas al sistema de Windows le mientan al programa.

Un ejemplo obvio son las funciones GetVersionEx y GetVersion que informan la versión de Windows especificada en lugar de la real.

Las rutas de archivo de estilo antiguo también se traducen automáticamente cuando un programa en modo de compatibilidad hace referencia a un archivo en carpetas de sistema conocidas. Por ejemplo, C:\Documents and Settingsse traduce C:\Users\<user>\Documents cuando se ejecuta en Windows 7 un programa en modo de compatibilidad con XP.

harrymc
fuente
-5

Este artículo hace un buen trabajo al explicarlo.

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

Sin embargo, con Windows 7, Redmond ha proporcionado una solución al problema: el modo Windows XP. El modo Windows XP utiliza la tecnología de virtualización para permitir que las aplicaciones que se ejecutan en una copia virtualizada de Windows XP se muestren en el menú Inicio de Windows 7 y en el escritorio de Windows 7.

whoacowboy
fuente
44
Modo Windows XP! = Modo de compatibilidad
Kevin Mark