WoW64

Subsistema para Windows de 64 bits para ejecutar programas de Windows de 32 bits
WoW64
Otros nombresWindows de 32 bits en Windows de 64 bits
Desarrollador(es)Microsoft
Lanzamiento inicial25 de octubre de 2001 ; hace 23 años ( 25 de octubre de 2001 )
Sistema operativoMicrosoft Windows
PlataformaIA-64 , x86-64 , ARM64
TipoCapa de compatibilidad
Licencia Software comercial propietario
Sitio webdocs.microsoft.com/en-us/windows/desktop/WinProg64/running-32-bit-applications

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.

Bibliotecas de traducción

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]

  1. 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 llamadas
  2. Wow64win.dll, que proporciona los puntos de entrada adecuados para aplicaciones de 32 bits (procesadores win32k)
  3. Una DLL que permite ejecutar instrucciones x86 de 32 bits, que varía según la arquitectura del conjunto de instrucciones .
    • En x86-64 , Wow64cpu.dllse 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]
    • En IA-64 ( Itanium 2 ), se necesitan tres archivos para una emulación de software más lenta [5] : Wow64cpu.dll, una "capa de abstracción de CPU"; , IA32Exec.binel emulador de software x86; y Wowia32x.dll, el puente entre el emulador y el sistema WOW64. [6]
    • En ARMv8 de 64 bits , xtajit.dllpara emulación x86 y wowarmhw.dllpara cambiar al modo ARM32. [3]

Registro y sistema de archivos

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%\system32directorio 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%\sysnativedesde 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 SysArm32en 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]

Compatibilidad de aplicaciones

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]

Actuación

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.

Véase también

  • Calce (informática)
  • El Control de cuentas de usuario también tiene un mecanismo para gestionar programas "antiguos" que escriben archivos en áreas específicas en ventanas "más nuevas". Los archivos escritos desde un proceso sin privilegios de administrador en ubicaciones protegidas, como Archivos de programa y windows\system32, se redirigirán a un directorio de almacenamiento virtual.
  • Ventanas sobre ventanas

Notas

  1. ^ En concreto:Wine , que no es un producto de Microsoft, también ofrece WoW64 experimental en su versión x64. [2] Wine también tiene wow64.dll, wow64win.dll, y wow64cpu.dll.

Referencias

  1. ^ QuinnRadich; DCtheGeek; msatranjr (19 de agosto de 2020). «Detalles de implementación de WOW64». learn.microsoft.com . Archivado desde el original el 16 de abril de 2023. Consultado el 16 de abril de 2023 .
  2. ^ Conway, Adam (25 de enero de 2023). «Wine 8.0 lanzado con mejor compatibilidad con controladores, soporte experimental para WoW64 y más». XDA Developers . Archivado desde el original el 16 de abril de 2023 . Consultado el 16 de abril de 2023 .
  3. ^ ab "Detalles de implementación de WOW64". Microsoft . Consultado el 21 de abril de 2018 .
  4. ^ Eckels, Stephen (9 de noviembre de 2020). "WOW64!Hooks: subsistemas internos de WOW64 y técnicas de enganche". Mandiant .
  5. ^ ab "Rendimiento y consumo de memoria en WOW64". Microsoft . Consultado el 6 de mayo de 2013 .
  6. ^ "Detalles de implementación de WOW64 (Windows)". 26 de abril de 2010. Archivado desde el original el 26 de abril de 2010.– Versión anterior del artículo, que se muestra Wow64cpu.dllcomo parte de la implementación de IA-64.
  7. ^ abc "Redirector del sistema de archivos (Windows)". msdn.microsoft.com . 2 de febrero de 2023.
  8. ^ "winapi - SHGetFolderPath() 32 bit vs 64 bit". Desbordamiento de pila .
  9. ^ Beneš, Petr (4 de noviembre de 2018). "Funciones internas de WoW64: redescubrimiento de Heaven's Gate en ARM". mindless-area (wbenny.github.io) .
  10. ^ Saw, Zach (13 de noviembre de 2010). "Error en WOW64: GetThreadContext() puede devolver contenido obsoleto". Blog de Zach Saw . Consultado el 15 de noviembre de 2010 .
  11. ^ "Error del sistema operativo WOW64: las aplicaciones antiguas de XP de 32 bits fallan en Win7 WOW64". Microsoft Developer Network . 11 de noviembre de 2010. Consultado el 15 de noviembre de 2010 .
  12. ^ "Discusiones sobre el recolector de basura Boehm (Boehm GC)" . Consultado el 25 de noviembre de 2010 .
  13. ^ "GetThreadContext devuelve valores de registro obsoletos en WOW64". Microsoft= 2016-07-23 . Consultado el 2016-07-23 .
  • Página de MSDN sobre cómo ejecutar aplicaciones de 32 bits en Windows de 64 bits
Retrieved from "https://en.wikipedia.org/w/index.php?title=WoW64&oldid=1210401997"