Perché Windows 11 archivia i file a 64 bit in System32 e quelli a 32 bit in SysWOW64

MS non offre un’edizione a 32 bit di Windows 11, ma il sistema operativo deve comunque supportare decenni di applicazioni a 32 bit. La sua soluzione si basa su due directory di sistema: System32 per i file nativi a 64 bit e SysWOW64 per i file a 32 bit. Il redirector del file system WOW64 indirizza automaticamente le applicazioni a 32 bit verso SysWOW64 quando tentano di accedere a System32.
Su un PC con Windows 11 26H2, entrambe le directory contengono un file denominato kernel32.dll. I file hanno dimensioni diverse perché uno è progettato per le applicazioni a 64 bit e l’altro per il software a 32 bit.

Se MS potesse interrompere il supporto per il software a 32 bit, come ha fatto Apple, Windows potrebbe non avere più bisogno di questa architettura di compatibilità. Tuttavia, l’elevato numero di applicazioni a 32 bit ancora esistenti rende questa transizione notevolmente più difficile.
Perché System32 contiene file a 64 bit
Durante l’era di Windows a 16 bit, i file di sistema venivano archiviati in C:\Windows\System. Con l’arrivo di Windows a 32 bit, MS introdusse C:\Windows\System32 per i file a 32 bit, il che spiega il nome della directory.
Quando fu sviluppato Windows a 64 bit, molte applicazioni avevano già il percorso System32 codificato direttamente nel codice, anziché ottenerlo tramite la funzione GetSystemDirectory. Raymond Chen, veterano di MS, ha spiegato che, dopo essere state ricompilate come programmi a 64 bit, tali applicazioni continuavano a cercare in System32, ma a quel punto si aspettavano di trovarvi file a 64 bit.
I file batch crearono un problema di compatibilità simile. Se System32 avesse continuato a contenere strumenti a 32 bit, uno script che eseguiva System32\reg.exe avrebbe modificato la visualizzazione del Registro di sistema a 32 bit anziché quella prevista a 64 bit.
MS decise quindi che System32 avrebbe contenuto file corrispondenti all’architettura nativa del sistema operativo. La documentazione relativa al redirector del file system specifica che la directory %windir%\System32 è riservata alle applicazioni a 64 bit nelle versioni di Windows a 64 bit.
Anche la maggior parte dei nomi delle DLL rimase invariata quando MS ne creò le versioni a 64 bit. Di conseguenza, kernel32.dll—il cui nome segue le vecchie convenzioni di denominazione di MS-DOS—si chiama kernel32.dll in entrambe le posizioni. Le versioni a 32 bit necessitavano quindi di una directory separata.
Chen ha osservato che il “32” di System32 è ormai semplicemente parte del nome, anziché una descrizione accurata del suo contenuto. Ha suggerito che, in una progettazione ideale, la cartella avrebbe potuto chiamarsi SysExec, poiché fornisce i file appropriati per il programma in esecuzione.
WOW64 significa “Windows a 32 bit su Windows a 64 bit”. È il livello di compatibilità di MS per le applicazioni a 32 bit. Il “64” di SysWOW64 si riferisce al sistema operativo host, anche se la directory stessa contiene file a 32 bit. Paradossalmente, le applicazioni a 64 bit non utilizzano la cartella di sistema con “64” nel nome.
Come Windows 11 reindirizza le applicazioni a 32 bit verso SysWOW64
Un processo a 32 bit non può caricare una DLL a 64 bit per eseguirla, così come un processo a 64 bit non può caricare una DLL a 32 bit. Senza il reindirizzamento, un’applicazione a 32 bit che richiede kernel32.dll da System32 riceverebbe un file incompatibile.
Su Windows x64, WOW64 reindirizza in modo trasparente le richieste pertinenti del file system ogni volta che un’applicazione a 32 bit richiede un percorso System32 protetto. In genere, l’applicazione non si accorge che il percorso è stato modificato.
Questo comportamento può essere verificato aprendo il Prompt dei comandi a 32 bit da C:\Windows\SysWOW64\cmd.exe. In quella finestra, echo %PROCESSOR_ARCHITECTURE% restituisce x86, mentre il Prompt dei comandi standard a 64 bit restituisce AMD64. Eseguendo dir C:\Windows\System32\kernel32.dll in entrambe le finestre vengono visualizzate dimensioni del file diverse, nonostante sia stato immesso lo stesso percorso, perché il processo a 32 bit viene reindirizzato alla copia presente in SysWOW64.


Persino Matt Pietrek, all’epoca membro del team Visual Studio di MS, si imbatté in questo comportamento. In un articolo di MSDN Magazine del 2006, descrisse come aveva elencato kernel32.dll in entrambe le directory da un Prompt dei comandi a 32 bit, rimanendo inizialmente perplesso quando i risultati apparvero identici.
WOW64 va oltre il reindirizzamento del file system. Tramite il redirector del Registro di sistema, offre alle applicazioni a 32 bit una visualizzazione separata del Registro in HKEY_LOCAL_MACHINE\Software\Wow6432Node. Inoltre, imposta la loro variabile di ambiente %ProgramFiles% su Program Files (x86).

MS segnala un’eccezione insolita relativa al Controllo dell’account utente. Se l’apertura di un file reindirizzato attiva una richiesta UAC, il reindirizzamento non avviene e Windows avvia invece la versione a 64 bit. Quando opportuno, gli sviluppatori dovrebbero quindi specificare il percorso SysWOW64 oppure eseguire l’applicazione a 32 bit come amministratore.
Utilizzo della directory virtuale Sysnative
Sysnative è una directory virtuale disponibile esclusivamente per le applicazioni a 32 bit. Non è fisicamente presente in C:\Windows e le applicazioni a 64 bit non possono accedervi. L’inserimento di C:\Windows\Sysnative nella barra degli indirizzi di Esplora file a 64 bit genera un errore, mentre dir C:\Windows\Sysnative\cmd.exe funziona da un Prompt dei comandi a 32 bit.

Gli sviluppatori possono disattivare il reindirizzamento richiamando la funzione Wow64DisableWow64FsRedirection, ma questa operazione influisce su tutte le operazioni sui file del thread corrente. MS avverte che la disattivazione del reindirizzamento del file system può causare errori nel caricamento delle DLL.
Chen ha descritto Sysnative come “una soluzione locale a un problema locale”. In precedenza aveva consigliato agli sviluppatori di non contrastare l’emulatore, raccomandando che un programma di installazione a 32 bit avviasse un programma di installazione a 64 bit quando erano necessarie operazioni native a 64 bit. Molti problemi di compatibilità sorgono quando un’applicazione a 32 bit tenta di comportarsi come un processo a 64 bit.
Sei cartelle di System32 sono escluse dal reindirizzamento WOW64
MS identifica sei sottodirectory di System32 alle quali le applicazioni a 32 bit possono accedere senza essere reindirizzate. L’elenco delle esclusioni è cambiato nel tempo. Ad esempio, driverstore veniva reindirizzata in Windows Vista, Windows XP, Windows Server 2003 e Windows Server 2008.
MS non spiega il motivo di ogni esclusione. Tuttavia, alcune di queste directory contengono dati condivisi ai quali sia le applicazioni a 32 bit sia quelle a 64 bit devono accedere in modo coerente, come il file hosts in drivers\etc.
SysArm32 viene rimosso da Windows 11 su Arm
Sui computer basati su Arm, come i portatili Snapdragon X, anche le applicazioni x86 a 32 bit utilizzano SysWOW64. Storicamente, le applicazioni Arm a 32 bit venivano reindirizzate verso una terza directory denominata SysArm32.
Sui sistemi Arm64, WOW64 traduce il codice x86 tramite un emulatore denominato xtajit.dll. In confronto, i processori x64 eseguono nativamente il codice a 32 bit, con Wow64Cpu.dll che gestisce il passaggio tra le modalità di esecuzione, secondo la documentazione tecnica di MS.
La documentazione MS per gli sviluppatori Arm ora specifica che i PC Arm non supportano più le applicazioni Arm a 32 bit. Anche i file binari di sistema precedentemente archiviati nella directory SysArm32 sono in fase di rimozione. Le applicazioni x86 standard, sia a 32 sia a 64 bit, continuano a funzionare tramite l’emulazione Prism, che lo scorso anno ha ricevuto il supporto per AVX e AVX2.
La compatibilità ha la precedenza su una denominazione più chiara
MS avrebbe potuto rinominare System32 due decenni fa, ma così facendo avrebbe compromesso il funzionamento di molte applicazioni esistenti. L’azienda ha invece creato un redirector, un alias virtuale e una serie di esclusioni attorno al nome ormai consolidato della directory. Ciò riflette lo stesso approccio incentrato sulla compatibilità che ha preservato elementi come il gestore heap di Windows 95 per i software meno recenti.
Non tutte le applicazioni sono sopravvissute alla transizione verso Windows a 64 bit, con 3D Pinball come esempio particolarmente noto. Sebbene un nome come SysExec sarebbe stato più chiaro, il nome obsoleto di una directory è meno dannoso di malfunzionamenti diffusi di applicazioni e programmi di installazione.

