Sei sulla pagina 1di 22

Como Windows ejecuta aplicaciones

de 32 bits en 64 bits
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
carpetaWindowsSystem32. Sin embargo, en las versiones de 64 bits
de Windows se utiliza la carpetaWindowsSystem32 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 C

rogram 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 C

rogram Files y las

aplicaciones
32 bits estn instaladas en una carpeta nombrada Crogram Files (x86). S
in 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 C

rogram Files sino

que llama
funciones para obtener el nombre real de esta car eta en el PC en cues in. En
as versiones de 32 bits de Windows, la funcin SHGetSpecialFolder() se utiliza par
determinar el nombre y la localizacin de la carpeta de archivos de programa. Per
o en la versin de un S.O. x64, la funcin mira si la aplicacin funciona
a 32 bits
a 64 y realiza el cambio de direccin de la carpeta apuntando a la adecuada. L
a instalacin de una aplicacin no es la nica vez que se hace referencia a la c
arpeta de archivos de programa; puede tambin ser referenciada en el tiempo
de ejecucin. Aunque hay varias maneras que una aplicacin pueda determinar el no
mbre y la localizacin de la carpeta de archivos de programa, el empleo de las vari
ables de entorno es lo ms utiliza
o. 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, es
variable de entorno tambin se utiliza, pero trabaja de una forma diferen
te. 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. Sie
do ste el caso, ejecutar scripts puede ser un poco peligroso en un entorno de 6
4 bits. Debe Windows tratar el script como cdigo de 32 bits o como de 64? La r
espuesta 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 bi
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 co
mandos: uno de 64 bits y otro de 32. Las var
les de entorno se establecen de acuerdo al intrprete de com
andos u ilizado
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 C

rogram

Files. Si se lanza un sc
t, ste podr ejecutar aplicacion s y comandos de 64 bits, p
ts.

ro no de 32 bi

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 C

rogram 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 C

rogram 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
ena prctica de programacin y esperamos no encontrarlo en nuestras aplicaciones.
Tambin en el registro hay una estructura a utilizar cuand
o e est trabajando a 64 bits
y otra a usar cuando se est e
n 32 bits. As, dentro de HKEY_LOCAL_MACH
IN /SOFTWAREhay una arboresce
cia llamada Wow6432Node, que ser uti
lizada en lugar de HKEY_LOCAL_MACHINE/SOFTWARE cuando se est trabajando
a 32 bits. Aq
tenemos el mismo funcionamiento y problemas que con las anteriores redireccion
es. Por ejemplo, si lanzamos un cambio del registro haciendo doble-click sobre u
n fichero .REG, las entradas a aadir o modificar se harn sobre las claves
exactas que haya en este fichero y
como relativas a Wow6432Node si estos cambios son para una aplicacin de 32 bit
s. Si este fichero .REG es ejecutado por una aplicacin o una ventana de comandos
de 3
its, los cambios se incluirn en la parte del registro correspondiente
a 32 bits. En resumen, con este sistema empleado por el emulador WOW64, se pu
ede 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 embar
go, cuando estas aplicaciones, por alguna mala prctica de programacin o por alg
n truco obligado hacen referencia o utilizan de una forma no estnd
ar las carpetas WindowsSYSTEM32 (o WindowsSYSWOW64), Program Files (o Program
es (x86)) o el registr
, puede haber problemas que impidan su correcta ejecuci
n. El registro de Windows es un archivo que contiene a mayora de los datos de
a configuracin del sistema operativo de Windows. El registro contie
ne una v rieda
enorme de informacin, pero los datos de la configuracin
en que el emulador WOW64 est ms interesado son una lista de todos l
os objetos
l Component Object Model (COM) que han sido registrados por el sistema oper
ativo. COM proporciona una manera para que las aplicaciones (archivos .EXE) y la
s 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-ofprocess 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 Windowsque 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 in-process, porque el mezclar datos
in-process de 32 con 64 bits no se permite en un Windows de 64 bits."

Potrebbero piacerti anche