Por qué Windows 11 almacena archivos de 64 bits en System32 y archivos de 32 bits en SysWOW64

MS no ofrece una edición de 32 bits de Windows 11, pero el sistema operativo aún debe admitir décadas de aplicaciones de 32 bits. Su solución se basa en dos directorios del sistema: System32 para archivos nativos de 64 bits y SysWOW64 para archivos de 32 bits. El redirector del sistema de archivos WOW64 envía automáticamente las aplicaciones de 32 bits a SysWOW64 cuando intentan acceder a System32.
En un PC con Windows 11 26H2, ambos directorios contienen un archivo llamado kernel32.dll. Los archivos tienen tamaños diferentes porque uno está diseñado para aplicaciones de 64 bits y el otro para software de 32 bits.

Si MS pudiera dejar de admitir software de 32 bits, como ha hecho Apple, es posible que Windows ya no necesitara esta arquitectura de compatibilidad. Sin embargo, la gran cantidad de aplicaciones de 32 bits existentes hace que esa transición sea considerablemente más difícil.
Por qué System32 contiene archivos de 64 bits
Durante la era de Windows de 16 bits, los archivos del sistema se almacenaban en C:\Windows\System. Cuando llegó Windows de 32 bits, MS introdujo C:\Windows\System32 para los archivos de 32 bits, lo que explica el nombre del directorio.
Para cuando se desarrolló Windows de 64 bits, muchas aplicaciones tenían codificada de forma rígida la ruta de System32 en lugar de obtenerla mediante la función GetSystemDirectory. Raymond Chen, veterano de MS, explicó que, después de recompilar esas aplicaciones como programas de 64 bits, siguieron buscando en System32, pero ahora esperaban encontrar allí archivos de 64 bits.
Los archivos por lotes generaron un problema de compatibilidad similar. Si System32 hubiera seguido alojando herramientas de 32 bits, un script que ejecutara System32\reg.exe habría modificado la vista de 32 bits del Registro en lugar de la versión de 64 bits esperada.
Por lo tanto, MS decidió que System32 contendría archivos que coincidieran con la arquitectura nativa del sistema operativo. Su documentación sobre el redirector del sistema de archivos indica que el directorio %windir%\System32 está reservado para aplicaciones de 64 bits en Windows de 64 bits.
La mayoría de los nombres de las DLL tampoco cambiaron cuando MS creó las versiones de 64 bits. Como resultado, kernel32.dll, cuyo nombre sigue las antiguas convenciones de nomenclatura de MS-DOS, se llama kernel32.dll en ambas ubicaciones. En consecuencia, las versiones de 32 bits necesitaban un directorio independiente.
Chen señaló que el “32” de System32 ahora es simplemente parte del nombre y no una descripción precisa de su contenido. Sugirió que, en un diseño ideal, la carpeta podría haberse llamado SysExec, ya que proporciona los archivos adecuados para el programa que se está ejecutando.
WOW64 significa “Windows de 32 bits en Windows de 64 bits”. Es la capa de compatibilidad de MS para aplicaciones de 32 bits. El “64” de SysWOW64 hace referencia al sistema operativo anfitrión, aunque el propio directorio contiene archivos de 32 bits. Irónicamente, las aplicaciones de 64 bits no utilizan la carpeta del sistema que incluye “64” en su nombre.
Cómo Windows 11 redirige las aplicaciones de 32 bits a SysWOW64
Un proceso de 32 bits no puede cargar una DLL de 64 bits para ejecutarla, y un proceso de 64 bits no puede cargar una DLL de 32 bits. Sin redirección, una aplicación de 32 bits que solicitara kernel32.dll desde System32 recibiría un archivo incompatible.
En Windows x64, WOW64 redirige de forma transparente las solicitudes pertinentes del sistema de archivos cada vez que una aplicación de 32 bits solicita una ruta protegida de System32. Por lo general, la aplicación no se da cuenta de que la ruta ha cambiado.
Este comportamiento puede demostrarse abriendo el Símbolo del sistema de 32 bits desde C:\Windows\SysWOW64\cmd.exe. En esa ventana, echo %PROCESSOR_ARCHITECTURE% devuelve x86, mientras que el Símbolo del sistema estándar de 64 bits muestra AMD64. Al ejecutar dir C:\Windows\System32\kernel32.dll en ambas ventanas se muestran tamaños de archivo diferentes, aunque se haya introducido la misma ruta, porque el proceso de 32 bits se redirige a la copia de SysWOW64.


Incluso Matt Pietrek, que entonces formaba parte del equipo de Visual Studio de MS, se encontró con este comportamiento. En un artículo de MSDN Magazine de 2006, describió cómo enumeró kernel32.dll en ambos directorios desde un Símbolo del sistema de 32 bits y cómo inicialmente quedó desconcertado al ver que los resultados parecían idénticos.
WOW64 va más allá de la redirección del sistema de archivos. Proporciona a las aplicaciones de 32 bits una vista independiente del Registro en HKEY_LOCAL_MACHINE\Software\Wow6432Node mediante el redirector del Registro. También establece su variable de entorno %ProgramFiles% en Program Files (x86).

MS señala una excepción inusual relacionada con el Control de cuentas de usuario. Si al abrir un archivo redirigido se activa un aviso de UAC, la redirección no se produce y Windows inicia en su lugar la versión de 64 bits. Por lo tanto, cuando corresponda, los desarrolladores deben especificar la ruta de SysWOW64 o ejecutar la aplicación de 32 bits como administrador.
Uso del directorio virtual Sysnative
Sysnative es un directorio virtual disponible únicamente para aplicaciones de 32 bits. No aparece físicamente en C:\Windows y las aplicaciones de 64 bits no pueden acceder a él. Introducir C:\Windows\Sysnative en la barra de direcciones del Explorador de archivos de 64 bits produce un error, mientras que dir C:\Windows\Sysnative\cmd.exe funciona desde un Símbolo del sistema de 32 bits.

Los desarrolladores pueden deshabilitar la redirección llamando a la función Wow64DisableWow64FsRedirection, pero hacerlo afecta a todas las operaciones con archivos del hilo actual. MS advierte que deshabilitar la redirección del sistema de archivos puede provocar errores al cargar DLL.
Chen describió Sysnative como “una solución local para un problema local”. Anteriormente había aconsejado a los desarrolladores que no intentaran enfrentarse al emulador y recomendó que un instalador de 32 bits iniciara uno de 64 bits cuando se requirieran operaciones nativas de 64 bits. Muchos problemas de compatibilidad surgen cuando una aplicación de 32 bits intenta comportarse como un proceso de 64 bits.
Seis carpetas de System32 están exentas de la redirección de WOW64
MS identifica seis subdirectorios de System32 a los que las aplicaciones de 32 bits pueden acceder sin ser redirigidas. La lista de excepciones ha cambiado con el tiempo. Por ejemplo, driverstore se redirigía en Windows Vista, Windows XP, Windows Server 2003 y Windows Server 2008.
MS no explica el motivo de cada excepción. Sin embargo, algunos de estos directorios contienen datos compartidos a los que tanto las aplicaciones de 32 bits como las de 64 bits necesitan acceder de forma coherente, como el archivo hosts ubicado en drivers\etc.
SysArm32 se está eliminando de Windows 11 en Arm
En equipos basados en Arm, como los portátiles con Snapdragon X, las aplicaciones x86 de 32 bits también utilizan SysWOW64. Históricamente, las aplicaciones Arm de 32 bits se redirigían a un tercer directorio llamado SysArm32.
En sistemas Arm64, WOW64 traduce el código x86 mediante un emulador llamado xtajit.dll. En comparación, los procesadores x64 ejecutan código de 32 bits de forma nativa, con Wow64Cpu.dll gestionando la transición entre los modos de ejecución, según la documentación de implementación de MS.
La documentación para desarrolladores de Arm de MS indica ahora que los PC Arm ya no admiten aplicaciones Arm de 32 bits. Los archivos binarios del sistema que anteriormente se almacenaban en el directorio SysArm32 también se están eliminando. Las aplicaciones x86 estándar, tanto de 32 como de 64 bits, continúan ejecutándose mediante la emulación Prism, que recibió compatibilidad con AVX y AVX2 el año pasado.
La compatibilidad tiene prioridad sobre una nomenclatura más clara
MS podría haber cambiado el nombre de System32 hace dos décadas, pero hacerlo habría provocado que muchas aplicaciones existentes dejaran de funcionar. En su lugar, la empresa creó un redirector, un alias virtual y un conjunto de excepciones en torno al nombre de directorio ya establecido. Esto refleja el mismo enfoque centrado en la compatibilidad que conservó elementos como el administrador de memoria dinámica de Windows 95 para el software antiguo.
No todas las aplicaciones sobrevivieron a la transición a Windows de 64 bits, y 3D Pinball es un ejemplo destacado. Aunque un nombre como SysExec habría sido más claro, un nombre de directorio obsoleto causa menos perjuicios que los fallos generalizados de aplicaciones e instaladores.

