¿Cómo funciona internamente el modo de compatibilidad en Windows?
¿Cómo funciona internamente el modo de compatibilidad en Windows?
Respuestas:
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 GetVersionEx
en 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 GetVersionEx
función, de modo que la aplicación no llama GetVersionEx
desde kernel32.dll
sino GetVersionEx
a la cuña. Las funciones shimmed implementan el comportamiento de las versiones anteriores de Windows. GetVersionEx
es 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 WindowsGetVersionEx
La 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.
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
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 Settings
se traduce C:\Users\<user>\Documents
cuando se ejecuta en Windows 7 un programa en modo de compatibilidad con XP.
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.