En informática en plataformas Microsoft , WoW64 ( Windows 32-bit o Windows 64 - bit) es un subsistema del sistema operativo Windows capaz de ejecutar aplicaciones de 32 bits en Windows de 64 bits. [1] Está incluido en todas las versiones de 64 bits de Windows, excepto en Windows Server Server Core donde es un componente opcional, y Windows Nano Server donde no está incluido. [a] WoW64 tiene como objetivo solucionar muchas de las diferencias entre Windows de 32 bits y Windows de 64 bits, en particular las que implican cambios estructurales en el propio Windows.
El subsistema WoW64 comprende una capa de compatibilidad liviana que tiene interfaces similares en todas las versiones de 64 bits de Windows. Su objetivo es crear un entorno de 32 bits que proporcione las interfaces necesarias para ejecutar aplicaciones de Windows de 32 bits sin modificar en un sistema de 64 bits. WOW64 se implementa utilizando varias DLL, algunas de las cuales incluyen: [3]
Wow64.dll
, la interfaz principal del núcleo de Windows NT que traduce (procesa) entre llamadas de 32 bits y 64 bits, incluidas las manipulaciones de punteros y pilas de llamadasWow64win.dll
, que proporciona los puntos de entrada adecuados para aplicaciones de 32 bits (procesadores win32k)Wow64cpu.dll
se encarga de cambiar el procesador del modo de 32 bits al de 64 bits. Esto es computacionalmente económico, ya que las máquinas x86-64 tienen un modo nativo para ejecutar código x86 de 32 bits. [4]Wow64cpu.dll
, una "capa de abstracción de CPU"; , IA32Exec.bin
el emulador de software x86; y Wowia32x.dll
, el puente entre el emulador y el sistema WOW64. [6]xtajit.dll
para emulación x86 y wowarmhw.dll
para cambiar al modo ARM32. [3]El subsistema WoW64 también se encarga de otros aspectos clave de la ejecución de aplicaciones de 32 bits. Interviene en la gestión de la interacción de las aplicaciones de 32 bits con los componentes de Windows, como el Registro , que tiene claves distintas para aplicaciones de 64 y 32 bits. Por ejemplo, HKEY_LOCAL_MACHINE\Software\Wow6432Node es el equivalente de 32 bits de HKEY_LOCAL_MACHINE\Software (aunque las aplicaciones de 32 bits no son conscientes de esta redirección). Algunas claves del Registro se asignan de 64 bits a sus equivalentes de 32 bits, mientras que otras tienen su contenido reflejado, según la edición de Windows.
El sistema operativo utiliza el %SystemRoot%\system32
directorio para sus bibliotecas de 64 bits y archivos ejecutables. Esto se hace por razones de compatibilidad con versiones anteriores, ya que muchas aplicaciones antiguas están codificadas para utilizar esa ruta. Al ejecutar aplicaciones de 32 bits, WoW64 redirige de forma transparente el acceso a "system32" (por ejemplo, cargas de DLL) a %SystemRoot%\SysWoW64
, que contiene bibliotecas y archivos ejecutables de 32 bits. Las excepciones a estas redirecciones son: [7]
%SystemRoot%\system32\catroot
%SystemRoot%\system32\catroot2
%SystemRoot%\system32\driverstore
(redirigido a Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP)%SystemRoot%\system32\drivers\etc
%SystemRoot%\system32\logfiles
%SystemRoot%\system32\spool
La redirección ayuda a mantener las aplicaciones de 32 bits funcionando sin que necesiten estar al tanto del estado de WoW64. [7] Si una aplicación de 32 bits quiere acceder al directorio real %SystemRoot%\System32
, puede hacerlo a través del pseudodirectorio %SystemRoot%\sysnative
desde Windows Vista. [7] La detección del estado de Wow64 es posible a través de IsWow64Process()
.
Hay dos directorios de Archivos de programa, cada uno visible para aplicaciones de 32 y 64 bits. El directorio que almacena los archivos de 32 bits se llama Archivos de programa (x86) para diferenciarlos, mientras que el de 64 bits mantiene el nombre tradicional de Archivos de programa sin ningún calificador adicional. No se utiliza la redirección del sistema de archivos para mantener la separación; en su lugar, WoW64 cambia y realiza consultas similares para indicar a los programas de instalación el directorio correcto. [8]FOLDERID_ProgramFiles
También se encuentran algunos nuevos directorios en ARM64, donde WOW64 maneja no sólo la ejecución de programas x86 de 32 bits, sino también de programas ARM de 32 bits, que utiliza SysArm32
en su lugar. ARM64 también soporta el llamado CHPE "compiled-hybrid-PE", que tiene código ARM64 en un contenedor de dll x86 (para una compatibilidad más eficiente y sin emulación); estas dlls se encuentran en SyCHPE32
. [9]
Las aplicaciones de 32 bits que incluyen únicamente controladores de dispositivos en modo kernel de 32 bits , o que se conectan al espacio de proceso de componentes que se implementan puramente como procesos de 64 bits (por ejemplo, el Explorador de Windows) no se pueden ejecutar en una plataforma de 64 bits.
Las aplicaciones de servicio de 32 bits son compatibles. La carpeta SysWOW64 ubicada en la carpeta Windows en la unidad del SO contiene varias aplicaciones para admitir aplicaciones de 32 bits (por ejemplo, cmd.exe, odbcad32.exe, para registrar conexiones ODBC para aplicaciones de 32 bits). Las aplicaciones heredadas de 16 bits para MS-DOS y versiones anteriores de Windows generalmente son incompatibles con las versiones de 64 bits de Windows Vista, 7, 8 y 10, pero se pueden ejecutar en un sistema operativo Windows de 64 bits a través del software de virtualización. Por otro lado, las versiones de 32 bits de Windows XP, Vista, 7, 8 y 10 generalmente pueden ejecutar aplicaciones de 16 bits con pocos o ningún problema. Las aplicaciones de 16 bits no se pueden ejecutar directamente en ediciones x64 de Windows, porque la CPU no admite el modo VM86 cuando se ejecuta en x64.
Internet Explorer se implementa como una aplicación de 32 bits y de 64 bits debido a la gran cantidad de componentes ActiveX de 32 bits en Internet que no podrían conectarse a la versión de 64 bits.
Anteriormente, la versión de 32 bits se utilizaba de forma predeterminada y era difícil establecer la versión de 64 bits como navegador predeterminado. Esto cambió en Internet Explorer 10, que ejecutaba complementos de 32 bits dentro de una sesión de 64 bits, eliminando la necesidad de cambiar entre las dos versiones. Si un usuario accedía a la carpeta de 32 bits (normalmente C:\Archivos de programa (x86)\Internet Explorer) y hacía doble clic en el archivo iexplore.exe, se cargaba igualmente la versión de 64 bits. En Internet Explorer 9 y versiones anteriores, esto cargaba solo la versión de 32 bits.
A partir de 2010 [actualizar], un error en la capa de traducción de la versión x64 de WoW64 [10] [11] también hace que todas las aplicaciones de 32 bits que dependen de la función GetThreadContext de la API de Windows sean incompatibles. Dichas aplicaciones incluyen depuradores de aplicaciones, rastreadores de pila de llamadas (por ejemplo, IDE que muestran la pila de llamadas) y aplicaciones que utilizan motores de recolección de basura (GC). Uno de los motores de GC más utilizados pero afectados [12] es Boehm GC . También se utiliza como el recolector de basura predeterminado del igualmente popular Mono . Si bien Mono ha introducido un nuevo GC (pero opcional) a partir de octubre de 2010 llamado SGen-GC, realiza el escaneo de pila de la misma manera que Boehm GC, lo que también lo hace incompatible con WoW64. No se ha proporcionado ninguna solución a partir de julio de 2016, aunque se han sugerido soluciones alternativas. [13]
Según Microsoft, el software de 32 bits que se ejecuta en WOW64 (x64) tiene un rendimiento similar al que se ejecuta en Windows de 32 bits, pero con menos subprocesos posibles. En un sistema que no sea x64, WOW64 genera una sobrecarga de rendimiento debido a la emulación de software involucrada. [5]
A una aplicación de 32 bits se le pueden asignar 4 gigabytes completos de memoria virtual en un sistema de 64 bits, mientras que en un sistema de 32 bits, parte de esta memoria direccionable se pierde porque es utilizada por el núcleo y los periféricos mapeados en memoria, como el adaptador de pantalla , lo que generalmente da como resultado que las aplicaciones puedan usar 2 GB o 3 GB de RAM como máximo.
wow64.dll
, wow64win.dll
, y wow64cpu.dll
.Wow64cpu.dll
como parte de la implementación de IA-64.