Вы находитесь на странице: 1из 6

COMO WINDOWS 64BITS EJECUTA APLICACIONES DE 32BITS Estaba yo en uno de esos trabajos inspirados en "Los 12 trabajos de Hrcules" que

me tocan realizar antes de coger vacaciones, cuando me encontr intentando ejecutar en Vista 64bits aplicaciones de 32 bits creadas en Visual Basic 6, y me encontr con algunos problemas para hacerlos funcionar. Al final consegu que funcionaran y mientras miraba en Internet intentando buscar solucin a los diversos problemas, me encontr con algunos artculos que me ensearon algunos conceptos que no saba sobre la manera en que un sistema Windows(XP y Vista) de 64 bits consegua que funcionaran en l aplicaciones de 32 bits. Supongo que la mayor parte de los lectores ya conocern el funcionamiento de la emulacin, pero no me resisto aqu a traducir unos artculos que explican muy bien cmo funciona: "Las versiones x64 de Windows (entre ellas la reciente de Windows Vista 64 bits) no son capaces de ejecutar cdigo de 32 bits de forma nativa. Como hoy en da la mayor parte de las aplicaciones siguen siendo de 32 bits, las versiones x64 de Windows hacen uso de un emulador conocido como WOW64 para permitir que las aplicaciones de 32 bits funcionen en ellas. Uno de los problemas con el funcionamiento de cdigo de 32 bits en un sistema operativo de 64 bits es que el OS debe mantener una separacin completa del cdigo. Microsoft ha creado una carpeta nueva llamada WindowsSysWOW64 que se utiliza para almacenar las DLL y componentes de 32bits. En las versiones de 32 bits de Windows, los archivos DLL se almacenan normalmente en la carpeta WindowsSystem32. Sin embargo, en las versiones de 64 bits de Windows se utiliza la carpeta WindowsSystem32 para las DLL de 64bits. Como se puede ver, el emulador WOW64 debe realizar el cambio de direccin del sistema de ficheros para garantizar que el cdigo de 32 y 64 bits siga separado. Pero mantener archivos del DLL separados es solamente el principio. El emulador WOW64 realiza el cambio de direccin del sistema de ficheros para varios componentes clave del sistema operativo de Windows. Otro lugar en Windows en donde se utiliza el cambio de direccin del sistema de ficheros es en la carpeta de archivos de programa. Casi todas las aplicaciones instaladas copian sus archivos a la carpeta Crogram Files dentro de una carpeta propia para la aplicacin. En las versiones x64 de Windows, las aplicaciones de 64 bits estn instaladas en la carpeta Crogram Files y las aplicaciones de 32 bits estn instaladas en una carpeta nombrada Crogram Files (x86).

Sin embargo, la carpeta de archivos de programa puede no estar siempre en el mismo lugar en cada microordenador. Por ello, la mayora de los desarrolladores no hacen referencia dentro sus programas directamente a Crogram Files sino que llaman a funciones para obtener el nombre real de esta carpeta en el PC en cuestin.

En las versiones de 32 bits de Windows, la funcin SHGetSpecialFolder() se utiliza para determinar el nombre y la localizacin de la carpeta de archivos de programa. Pero en la versin de un S.O. x64, la funcin mira si la aplicacin funciona a 32 bits o a 64 y realiza el cambio de direccin de la carpeta apuntando a la adecuada.

La instalacin de una aplicacin no es la nica vez que se hace referencia a la carpeta de archivos de programa; puede tambin ser referenciada en el tiempo de ejecucin. Aunque hay varias maneras que una aplicacin pueda determinar el nombre y la localizacin de la carpeta de archivos de programa, el empleo de las variables de entorno es lo ms utilizado. En una versin de 32 bits de Windows, la variable de entorno %ProgramFiles% contiene la trayectoria a la carpeta de archivos de programa. En una versin x64 de Windows, esta variable de entorno tambin se utiliza, pero trabaja de una forma diferente.

La regla ms importante de la plataforma x64 es que no puedes mezclar de ninguna manera cdigo de 64 y 32 bits. Las variables de entorno se llaman a menudo dentro de ficheros de comandos por lotes (.CMD o .BAT) o por scripts. Siendo ste el caso, ejecutar scripts puede ser un poco peligroso en un entorno de 64 bits. Debe Windows tratar el script como cdigo de 32 bits o como de 64? La respuesta afecta no slo al contenido de las variables de entorno, sino tambin que los programas que llame el propio script. Por ejemplo, un script de 64 bits no puede lanzar un proceso de 32 bits (por lo menos no de la manera normal).

Windows consigue solucionar estos problemas ofreciendo dos intrpretes de comandos: uno de 64 bits y otro de 32. Las variables de entorno se establecen de acuerdo al intrprete de comandos utilizado.

Por ejemplo, si se abre una ventana de comandos lanzando el comando CMD.EXE en la ventana Inicio/Ejecutar (Run), Windows abrir una ventana de comandos de 64 bits. En la mayora de los casos, la variable de entorno %ProgramFiles% para el entorno de trabajo ser fijada a Crogram Files. Si se lanza un script, ste podr ejecutar aplicaciones y comandos de 64 bits, pero no de 32 bits.

En el lado contrario, si se lanza C:WindowsSysWOW64cmd.exe en la ventana Inicio/Ejecutar , la ventana de comandos que se ejecuta es de 32 bits. En ese caso, la variable de entorno del %ProgramFiles% ser Crogram Files (x86).

Como se puede ver, la localizacin de la carpeta de archivos de programa se redirige dependiendo de si se est funcionando a 32 64 bits. Pero hay una excepcin a esta regla: si una aplicacin tiene la referencia a la carpeta de archivos de programa escrita directamente como Crogram Files, por ejemplo, se utilizar esta carpeta directamente, sin tener en cuenta el entorno en el que se est trabajando y esto podra dar lugar a diversos problemas, al intentar ejecutar cdigo de 64 bits de algn componente cuando la aplicacin es de 32 bits. Afortunadamente esto no es una buena prctica de programacin y esperamos no encontrarlo en nuestras aplicaciones.

Tambin en el registro hay una estructura a utilizar cuando se est trabajando a 64 bits y otra a usar cuando se est en 32 bits. As, dentro de HKEY_LOCAL_MACHINE/SOFTWARE hay una arborescencia llamada Wow6432Node, que ser utilizada en lugar de HKEY_LOCAL_MACHINE/SOFTWARE cuando se est trabajando a 32 bits. Aqu tenemos el mismo funcionamiento y problemas que con las anteriores redirecciones.

Por ejemplo, si lanzamos un cambio del registro haciendo doble-click sobre un fichero .REG, las entradas a aadir o modificar se harn sobre las claves exactas que haya en este fichero y no como relativas a Wow6432Node si estos cambios son para una aplicacin de 32 bits.

Si este fichero .REG es ejecutado por una aplicacin o una ventana de comandos de 32 bits, los cambios se incluirn en la parte del registro correspondiente a 32 bits.

En resumen, con este sistema empleado por el emulador WOW64, se puede conseguir que la mayor parte de las aplicaciones de 32 bits puedan convivir con las de 64 en un puesto de trabajo que utilice un S.O. de 64 bits. Sin embargo, cuando estas aplicaciones, por alguna mala prctica de programacin o por algn truco obligado hacen referencia o utilizan de una forma no estndar las carpetas WindowsSYSTEM32 (o WindowsSYSWOW64), Program Files (o Program Files (x86)) o el registro, puede haber problemas que impidan su correcta ejecucin.

El registro de Windows es un archivo que contiene a mayora de los datos de la configuracin del sistema operativo de Windows. El registro contiene una variedad enorme de informacin, pero los datos de la configuracin en que el emulador WOW64 est ms interesado son una lista de todos los objetos del Component Object Model (COM) que han sido registrados por el sistema operativo.

COM proporciona una manera para que las aplicaciones (archivos .EXE) y las bibliotecas (archivos .DLL) puedan hacerse accesibles a cualquier otra aplicacin o fichero de comandos que cumpla las normas COM. COM permite que alguien con habilidades de programacin mnimas pueda escribir una aplicacin o un script que interacte con Windows. La persona que escribe la aplicacin o el script puede hacerlo sin tener que aprender un lenguaje de programacin tal como C++, y sin tener que aprender todos los interfaces de programacin de Windows (APIs).

Windows se dise de manera que todos los objetos COM disponibles estuvieran dentro del registro. Para garantizar que el cdigo de 32 bits est aislado totalmente del cdigo de 64 bits, los objetos COM de 32 y 64bits se almacenan en dos partes distintas del registro.

En lenguaje de Microsoft un servidor COM es un objeto que hace disponible su funcionalidad a travs de COM. Las aplicaciones y scripts que hacen uso de esa funcionalidad se llaman clientes COM.

Cuando se habla de un servidor COM in-process se refiere generalmente a las bibliotecas (archivos .DLL), porque stas se ejecutan como parte del mismo proceso que las aplicaciones y scripts que los llamaron. Un servidor COM out-of-process es un objeto COM (generalmente un fichero ejecutable) que se ejecuta en un proceso distinto que la aplicacin o script que lo llam.

Cuando una aplicacin intenta registrar un objeto COM, el emulador WOW64 pondr las entradas correspondientes en la seccin apropiada del registro, dependiendo de si el objeto COM es un objeto de 64 o de 32 bits.

Cuando una aplicacin o un script que se supone que son de 32 bits intentan cargar un objeto COM en el proceso, el emulador WOW64 redirecciona el registro para estar seguro que la aplicacin o script lee la porcin del registro que refiere a objetos COM de 32 bits. Si el registro no contiene una referencia a una versin de 32 bits del objeto COM solicitado, WOW64 dir a la aplicacin que no existe el objeto, aunque exista una versin 64 bits disponible. La misma cosa sucede si una aplicacin de 64 bits solicita un objeto COM. Windows comprobar la parte del registro correspondiente a 64 bits para saber si hay una referencia al objeto y no har caso de cualquier objeto COM de 32 bits.

Servidores COM Out-of-process La manera que WOW64 vuelve a dirigir peticiones de servidores COM in-process es bastante directa. Pero las cosas funcionan diferentemente para los servidores COM out-of-process. La redireccin del registro todava hace falta, pero esto es solamente una parte del proceso.

Las llamadas a un servidor COM out-of-process son la excepcin a la regla de mantener separados el cdigo de 32 bits y el de 64.

Aislar el cdigo de 32 bits es normalmente un requisito porque no puedes mezclar cdigo de 64 bits y de 32 dentro de un proceso. Pero cuando son servidores COM out-of-process, el objeto COM est funcionando en un proceso totalmente distinto del del cdigo que lo llam. Esto significa que la aplicacin puede funcionar con cdigo de 32 y llamar a un objeto COM de 64 bits, o viceversa.

Ya que la aplicacin y el objeto COM estn funcionando en procesos distintos, es fcil ver que sera posible que funcionaran ambos en el mismo sistema. Pero cmo puede la aplicacin comunicarse con un objeto COM si uno est funcionando en 32 bits y el otro en 64? Aunque la aplicacin y el objeto COM no puedan interactuar directamente uno con otro porque estn funcionando en procesos distintos, pueden comunicarse con Remote Procedure Calls (RPCs).

Los ordenadores que funcionan en una versin x64 de Windows utilizan la redireccin del registro para conseguir el funcionamiento de aplicaciones de 32 y 64 bits. Esta redireccin del registro evita que las aplicaciones sobre-escriban la configuracin de las de 64 bits, pero permite todava que las aplicaciones y los archivos DLL que utilicen arborescencias escritas a mano continen funcionando.

Las claves del registro relacionadas con las aplicaciones estn instaladas generalmente en la clave HKEY_LOCAL_MACHINESOFTWARE. En una versin x64 de Windows, esta entrada se utiliza exclusivamente para almacenar los datos de la configuracin relacionados con las aplicaciones de 64 bits. Los datos de configuracin relacionados con aplicaciones de 32 bits se almacenan en la clave del registro HKEY_LOCAL_MACHINESOFTWAREWOW6432node.

Obviamente, las aplicaciones de 32 bits no estn diseadas para buscar en la entrada HKEY_LOCAL_MACHINESOFTWAREWOW6432node. El emulador WOW64 intercepta las llamadas

del registro de las aplicaciones de 32 bits y, de forma transparente, vuelve a dirigir estas llamadas al lugar apropiado dentro del registro de Windows.

La entrada HKEY_LOCAL_MACHINESOFTWARE a menudo contiene algo ms que los datos de la configuracin para las aplicaciones. En ella se almacenan los datos de configuracin relacionados con cosas tales como la incrustacin y vinculado de objetos o las llamadas remotas (RPCs). Por ello, las llamadas a las llaves secundarias debajo de esta entrada tambin se redirigen.

Reflexin del Registro As visto, la redireccin del registro parece bastante potente. Incluso as, algunas funciones de Windows que se puede pensar que estn garantizadas, por ejemplo la vinculacin e incrustacin de objetos y las asociaciones de ficheros por la extensin, no funcionaran correctamente si la redireccin simple fuera el nico mecanismo usado. Por ello, las versiones x64 de Windows utilizan tambin otra tcnica conocida como reflexin del registro. Esta tcnica copias claves especficas y valores del registro entre las dos vistas del registro (una de 32 bits y otra de 64 bits) para mantenerlas sincronizadas. El reflector es inteligente y copia datos del COM activo para los servidores locales entre las vistas del registro, pero no los datos inprocess, porque el mezclar datos in-process de 32 con 64 bits no se permite en un Windows de 64 bits."

Вам также может понравиться