Articulo de referencia

WoW64

En la informática en plataformas de Microsoft , WoW64 ( Windows de 32 bits en Windows de 64 bits ) es un subsistema del sistema operativo Windows capaz de ejecutar aplicaciones ...

En la informática en plataformas de Microsoft , WoW64 ( Windows de 32 bits en Windows de 64 bits ) 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 Core , donde es un componente opcional, y en 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, particularmente en lo que respecta a cambios estructurales en el propio Windows.

Bibliotecas de traducción

El subsistema WoW64 comprende una capa de compatibilidad ligera 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 (mediante thunks) entre llamadas de 32 bits y 64 bits, incluyendo manipulaciones de punteros y pilas de llamadas.
  2. Wow64win.dll, que proporciona los puntos de entrada adecuados para aplicaciones de 32 bits (thunks win32k)
  3. Una DLL que permite ejecutar instrucciones x86 de 32 bits, lo cual 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.bin, el 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 gestiona otros aspectos clave de la ejecución de aplicaciones de 32 bits. Se encarga de la interacción de estas aplicaciones con componentes de Windows como el Registro , que cuenta con 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 desconocen esta redirección). Algunas claves del Registro se asignan de 64 bits a sus equivalentes de 32 bits, mientras que otras mantienen su contenido invertido, según la edición de Windows.

El sistema operativo utiliza el %SystemRoot%\system32directorio para sus archivos de biblioteca y ejecutables de 64 bits. Esto se hace por razones de compatibilidad con versiones anteriores, ya que muchas aplicaciones heredadas están codificadas para usar 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 ejecutables de 32 bits. Las excepciones a estas redirecciones son: [ 7 ]

  • %SystemRoot%\system32\catroot
  • %SystemRoot%\system32\catroot2
  • %SystemRoot%\system32\driverstore(redireccionado en 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 que las aplicaciones de 32 bits sigan funcionando sin necesidad de que conozcan el 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().

Existen 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 denomina Archivos de programa (x86) para diferenciarlos, mientras que el de 64 bits conserva el nombre tradicional de Archivos de programa sin ningún calificador adicional. No se utiliza la redirección del sistema de archivos para mantener esta separación; en su lugar, WoW64 modifica los resultados de consultas similares para indicar a los programas instaladores el directorio correcto. [ 8 ]FOLDERID_ProgramFiles

También se encuentran algunos directorios nuevos en ARM64, donde WOW64 maneja no solo la ejecución de programas x86 de 32 bits, sino también programas ARM de 32 bits, que utiliza SysArm32en su lugar. ARM64 también admite el llamado CHPE "compiled-hybrid-PE", que tiene código ARM64 en un contenedor dll x86 (para una compatibilidad más eficiente y sin emulación); estas dlls se encuentran en SyCHPE32. [ 9 ]

Compatibilidad de la aplicación

Las aplicaciones de 32 bits que incluyen únicamente controladores de dispositivos en modo kernel de 32 bits , o que se integran en el espacio de procesos de componentes implementados exclusivamente como procesos de 64 bits (por ejemplo, el Explorador de Windows), no se pueden ejecutar en una plataforma de 64 bits.

Se admiten aplicaciones de servicio de 32 bits. La carpeta SysWOW64, ubicada en la carpeta Windows de la unidad del sistema operativo, 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 suelen ser incompatibles con las versiones de 64 bits de Windows Vista, 7, 8 y 10, pero pueden ejecutarse en un sistema operativo Windows de 64 bits mediante software de virtualización. Por otro lado, las versiones de 32 bits de Windows XP, Vista, 7, 8 y 10 suelen 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, ya que la CPU no admite el modo VM86 cuando se ejecuta en x64.

Internet Explorer está implementado 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 integrarse en la versión de 64 bits.

Anteriormente, la versión de 32 bits se usaba por defecto y era difícil configurar 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 alternar entre ambas 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 cargaría la versión de 64 bits. En Internet Explorer 9 y versiones anteriores, esto solo cargaba la versión de 32 bits.

A partir de 2010Un error en la capa de traducción de la versión x64 de WoW64 [ 10 ] [ 11 ] también hace incompatibles todas las aplicaciones de 32 bits que dependen de la función GetThreadContext de la API de Windows . Estas 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 GC más utilizados pero afectados [ 12 ] es Boehm GC . También se utiliza como recolector de basura predeterminado del igualmente popular Mono . Si bien Mono introdujo un nuevo GC (opcional) en octubre de 2010 llamado SGen-GC, realiza el escaneo de la pila de la misma manera que Boehm GC, lo que también lo hace incompatible con WoW64. No se ha proporcionado ninguna solución hasta julio de 2016, aunque se han sugerido soluciones alternativas. [ 13 ]

Actuación

Según Microsoft, el software de 32 bits que se ejecuta bajo WOW64 (x64) tiene un rendimiento similar al de 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 ]

En un sistema de 64 bits, una aplicación de 32 bits puede disponer de 4  gigabytes completos de memoria virtual , mientras que en un sistema de 32 bits, parte de esta memoria direccionable se pierde porque la utilizan el núcleo y los periféricos mapeados en memoria, como el adaptador de pantalla , lo que normalmente resulta en que las aplicaciones puedan utilizar como máximo 2 GB o 3 GB de RAM.

Véase también

  • Shim (informática)
  • El Control de cuentas de usuario también cuenta con un mecanismo para gestionar programas antiguos que escriben archivos en áreas específicas de versiones más recientes de Windows. Los archivos escritos por 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.
  • Windows en Windows

Notas

  1. Específicamente: 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 del original el 16 de abril de 2023. Consultado el 16 de abril de 2023 .
  2. Conway, Adam (25/01/2023). "Wine 8.0 lanzado con mejor compatibilidad con controladores, soporte experimental para WoW64 y más" . XDA Developers . Archivado del original el 16/04/2023 . Recuperado el 16/04/2023 .
  3. 1 2 "Detalles de implementación de WOW64" . Microsoft . Consultado el 21 de abril de 2018 .
  4. Eckels, Stephen (9 de noviembre de 2020). "WOW64!Hooks: Internos del subsistema WOW64 y técnicas de enganche" . Mandiant .
  5. 1 2 "Rendimiento y consumo de memoria bajo WOW64" . Microsoft . Consultado el 6 de mayo de 2013 .
  6. "Detalles de implementación de WOW64 (Windows)" . 26 de abril de 2010. Archivado del 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. 1 2 3 "Redireccionador del sistema de archivos (Windows)" . msdn.microsoft.com . 2 de febrero de 2023.
  8. "winapi - SHGetFolderPath() 32 bits vs 64 bits" . Stack Overflow .
  9. Beneš, Petr (4 de noviembre de 2018). "WoW64 internals: redescubriendo 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)" . Archivado del original el 16 de julio de 2011. Consultado el 25 de noviembre de 2010 .
  13. "GetThreadContext devuelve valores de registro obsoletos en WOW64" . Microsoft = 23/07/2016 . Archivado del original el 19/08/2016 . Consultado el 23/07/2016 .
  • Página de MSDN sobre cómo ejecutar aplicaciones de 32 bits en Windows de 64 bits.