Porque é que o Windows 11 armazena ficheiros de 64 bits na System32 e ficheiros de 32 bits na SysWOW64

A MS não disponibiliza uma edição de 32 bits do Windows 11, mas o sistema operativo continua a ter de suportar décadas de aplicações de 32 bits. A solução baseia-se em dois diretórios do sistema: System32 para ficheiros nativos de 64 bits e SysWOW64 para ficheiros de 32 bits. O redirecionador do sistema de ficheiros WOW64 encaminha automaticamente as aplicações de 32 bits para a SysWOW64 quando estas tentam aceder à System32.
Num PC com o Windows 11 26H2, ambos os diretórios contêm um ficheiro chamado kernel32.dll. Os ficheiros têm tamanhos diferentes porque um foi concebido para aplicações de 64 bits e o outro para software de 32 bits.

Se a MS pudesse terminar o suporte para software de 32 bits, como a Apple fez, o Windows poderia deixar de precisar desta arquitetura de compatibilidade. No entanto, o elevado número de aplicações de 32 bits existentes torna essa transição significativamente mais difícil.
Porque é que a System32 contém ficheiros de 64 bits
Durante a era do Windows de 16 bits, os ficheiros do sistema eram armazenados em C:\Windows\System. Quando surgiu o Windows de 32 bits, a MS introduziu C:\Windows\System32 para ficheiros de 32 bits, o que explica o nome do diretório.
Quando o Windows de 64 bits foi desenvolvido, muitas aplicações já tinham o caminho da System32 codificado diretamente, em vez de o obterem através da função GetSystemDirectory. Raymond Chen, veterano da MS, explicou que, depois de essas aplicações terem sido recompiladas como programas de 64 bits, continuaram a procurar na System32, mas passaram a esperar encontrar aí ficheiros de 64 bits.
Os ficheiros batch criaram um problema de compatibilidade semelhante. Se a System32 tivesse continuado a conter ferramentas de 32 bits, um script que executasse System32\reg.exe teria modificado a vista de 32 bits do registo, em vez da versão de 64 bits esperada.
Por isso, a MS decidiu que a System32 conteria ficheiros correspondentes à arquitetura nativa do sistema operativo. A respetiva documentação do Redirecionador do Sistema de Ficheiros indica que o diretório %windir%\System32 está reservado para aplicações de 64 bits no Windows de 64 bits.
A maioria dos nomes de DLL também permaneceu inalterada quando a MS criou versões de 64 bits. Como resultado, kernel32.dll—cujo nome segue as antigas convenções de nomenclatura do MS-DOS—chama-se kernel32.dll em ambas as localizações. Consequentemente, as versões de 32 bits precisavam de um diretório separado.
Chen observou que o “32” em System32 é agora apenas parte do nome, e não uma descrição exata do respetivo conteúdo. Sugeriu que, num design ideal, a pasta poderia ter sido chamada SysExec, pois disponibiliza os ficheiros adequados ao programa que está a ser executado.
WOW64 significa “Windows de 32 bits no Windows de 64 bits”. É a camada de compatibilidade da MS para aplicações de 32 bits. O “64” em SysWOW64 refere-se ao sistema operativo anfitrião, apesar de o próprio diretório conter ficheiros de 32 bits. Ironicamente, as aplicações de 64 bits não utilizam a pasta do sistema que inclui “64” no nome.
Como o Windows 11 redireciona aplicações de 32 bits para a SysWOW64
Um processo de 32 bits não consegue carregar uma DLL de 64 bits para execução, e um processo de 64 bits não consegue carregar uma DLL de 32 bits. Sem redirecionamento, uma aplicação de 32 bits que solicitasse kernel32.dll à System32 receberia um ficheiro incompatível.
No Windows x64, o WOW64 redireciona de forma transparente os pedidos relevantes ao sistema de ficheiros sempre que uma aplicação de 32 bits solicita um caminho protegido da System32. Normalmente, a aplicação não se apercebe de que o caminho foi alterado.
Este comportamento pode ser demonstrado abrindo a Linha de Comandos de 32 bits a partir de C:\Windows\SysWOW64\cmd.exe. Nessa janela, echo %PROCESSOR_ARCHITECTURE% devolve x86, enquanto a Linha de Comandos padrão de 64 bits indica AMD64. Executar dir C:\Windows\System32\kernel32.dll em ambas as janelas apresenta tamanhos de ficheiro diferentes, apesar de ter sido introduzido o mesmo caminho, porque o processo de 32 bits é redirecionado para a cópia na SysWOW64.


Até Matt Pietrek, na altura membro da equipa do Visual Studio da MS, se deparou com este comportamento. Num artigo de 2006 da MSDN Magazine, descreveu como listou kernel32.dll em ambos os diretórios a partir de uma Linha de Comandos de 32 bits e ficou inicialmente perplexo quando os resultados pareceram idênticos.
O WOW64 vai além do redirecionamento do sistema de ficheiros. Através do redirecionador do registo, disponibiliza às aplicações de 32 bits uma vista separada do registo em HKEY_LOCAL_MACHINE\Software\Wow6432Node. Também define a variável de ambiente %ProgramFiles% dessas aplicações como Program Files (x86).

A MS assinala uma exceção invulgar relacionada com o Controlo de Conta de Utilizador. Se a abertura de um ficheiro redirecionado acionar um pedido do UAC, o redirecionamento não ocorre e o Windows inicia a versão de 64 bits. Por isso, quando apropriado, os programadores devem especificar o caminho da SysWOW64 ou executar a aplicação de 32 bits como administrador.
Utilizar o diretório virtual Sysnative
Sysnative é um diretório virtual disponível apenas para aplicações de 32 bits. Não existe fisicamente em C:\Windows, e as aplicações de 64 bits não lhe conseguem aceder. Introduzir C:\Windows\Sysnative na barra de endereços do Explorador de Ficheiros de 64 bits gera um erro, enquanto dir C:\Windows\Sysnative\cmd.exe funciona numa Linha de Comandos de 32 bits.

Os programadores podem desativar o redirecionamento chamando a função Wow64DisableWow64FsRedirection, mas fazê-lo afeta todas as operações de ficheiros no thread atual. A MS alerta que a desativação do redirecionamento do sistema de ficheiros pode fazer com que o carregamento de DLL falhe.
Chen descreveu a Sysnative como “uma solução local para um problema local”. Anteriormente, tinha aconselhado os programadores a não tentarem contrariar o emulador, recomendando que um instalador de 32 bits iniciasse um instalador de 64 bits quando fossem necessárias operações nativas de 64 bits. Muitos problemas de compatibilidade surgem quando uma aplicação de 32 bits tenta comportar-se como um processo de 64 bits.
Seis pastas da System32 estão isentas do redirecionamento WOW64
A MS identifica seis subdiretórios da System32 aos quais as aplicações de 32 bits podem aceder sem serem redirecionadas. A lista de isenções mudou ao longo do tempo. Por exemplo, driverstore era redirecionado no Windows Vista, Windows XP, Windows Server 2003 e Windows Server 2008.
A MS não explica o motivo de cada isenção. No entanto, alguns destes diretórios contêm dados partilhados aos quais as aplicações de 32 e 64 bits precisam de aceder de forma consistente, como o ficheiro hosts em drivers\etc.
A SysArm32 está a ser removida do Windows 11 em Arm
Em computadores baseados em Arm, como portáteis com Snapdragon X, as aplicações x86 de 32 bits também utilizam a SysWOW64. Historicamente, as aplicações Arm de 32 bits eram redirecionadas para um terceiro diretório chamado SysArm32.
Em sistemas Arm64, o WOW64 traduz código x86 através de um emulador chamado xtajit.dll. Em comparação, os processadores x64 executam código de 32 bits nativamente, com Wow64Cpu.dll a gerir a transição entre modos de execução, de acordo com a documentação de implementação da MS.
A documentação da MS para programadores Arm indica agora que os PCs Arm deixaram de suportar aplicações Arm de 32 bits. Os binários do sistema anteriormente armazenados no diretório SysArm32 também estão a ser removidos. As aplicações x86 padrão, tanto de 32 como de 64 bits, continuam a ser executadas através da emulação Prism, que recebeu suporte para AVX e AVX2 no ano passado.
A compatibilidade tem prioridade sobre uma nomenclatura mais clara
A MS poderia ter mudado o nome da System32 há duas décadas, mas isso teria impedido o funcionamento de muitas aplicações existentes. Em vez disso, a empresa criou um redirecionador, um alias virtual e um conjunto de isenções em torno do nome de diretório já estabelecido. Isto reflete a mesma abordagem centrada na compatibilidade que preservou elementos como o gestor de heap do Windows 95 para software mais antigo.
Nem todas as aplicações sobreviveram à transição para o Windows de 64 bits, sendo o 3D Pinball um exemplo notável. Embora um nome como SysExec tivesse sido mais claro, um nome de diretório desatualizado causa menos danos do que falhas generalizadas em aplicações e instaladores.

