Pourquoi Windows 11 stocke les fichiers 64 bits dans System32 et les fichiers 32 bits dans SysWOW64

MS ne propose pas d’édition 32 bits de Windows 11, mais le système d’exploitation doit tout de même prendre en charge des décennies d’applications 32 bits. Sa solution repose sur deux répertoires système : System32 pour les fichiers 64 bits natifs et SysWOW64 pour les fichiers 32 bits. Le redirecteur du système de fichiers WOW64 redirige automatiquement les applications 32 bits vers SysWOW64 lorsqu’elles tentent d’accéder à System32.
Sur un PC exécutant Windows 11 26H2, les deux répertoires contiennent un fichier nommé kernel32.dll. Ces fichiers ont des tailles différentes, car l’un est conçu pour les applications 64 bits et l’autre pour les logiciels 32 bits.

Si MS pouvait mettre fin à la prise en charge des logiciels 32 bits, comme Apple l’a fait, Windows n’aurait peut-être plus besoin de cette architecture de compatibilité. Cependant, le grand nombre d’applications 32 bits existantes rend cette transition nettement plus difficile.
Pourquoi System32 contient des fichiers 64 bits
À l’époque de Windows 16 bits, les fichiers système étaient stockés dans C:\Windows\System. Lorsque Windows 32 bits est apparu, MS a introduit C:\Windows\System32 pour les fichiers 32 bits, ce qui explique le nom du répertoire.
Au moment du développement de Windows 64 bits, de nombreuses applications avaient codé en dur le chemin System32 au lieu de l’obtenir à l’aide de la fonction GetSystemDirectory. Raymond Chen, vétéran de MS, a expliqué qu’après la recompilation de ces applications en programmes 64 bits, celles-ci continuaient à chercher dans System32, mais s’attendaient désormais à y trouver des fichiers 64 bits.
Les fichiers de commandes ont créé un problème de compatibilité similaire. Si System32 avait continué à contenir des outils 32 bits, un script exécutant System32\reg.exe aurait modifié la vue 32 bits du Registre au lieu de la version 64 bits attendue.
MS a donc décidé que System32 contiendrait les fichiers correspondant à l’architecture native du système d’exploitation. Sa documentation consacrée au redirecteur du système de fichiers indique que le répertoire %windir%\System32 est réservé aux applications 64 bits sous Windows 64 bits.
La plupart des noms de DLL sont également restés inchangés lorsque MS a créé les versions 64 bits. Par conséquent, kernel32.dll—dont le nom respecte les anciennes conventions de nommage de MS-DOS—porte le nom kernel32.dll aux deux emplacements. Les versions 32 bits avaient donc besoin d’un répertoire distinct.
Chen a souligné que le « 32 » de System32 fait désormais simplement partie du nom et ne décrit plus précisément son contenu. Il a suggéré que, dans une conception idéale, le dossier aurait pu être nommé SysExec, puisqu’il fournit les fichiers adaptés au programme en cours d’exécution.
WOW64 signifie « Windows 32-bit on Windows 64-bit ». Il s’agit de la couche de compatibilité de MS destinée aux applications 32 bits. Le « 64 » de SysWOW64 fait référence au système d’exploitation hôte, même si le répertoire lui-même contient des fichiers 32 bits. Ironiquement, les applications 64 bits n’utilisent pas le dossier système dont le nom contient « 64 ».
Comment Windows 11 redirige les applications 32 bits vers SysWOW64
Un processus 32 bits ne peut pas charger une DLL 64 bits pour l’exécuter, et un processus 64 bits ne peut pas charger une DLL 32 bits. Sans redirection, une application 32 bits demandant kernel32.dll à System32 recevrait un fichier incompatible.
Sous Windows x64, WOW64 redirige de manière transparente les requêtes pertinentes adressées au système de fichiers lorsqu’une application 32 bits demande un chemin System32 protégé. En règle générale, l’application ne se rend pas compte que le chemin a été modifié.
Ce comportement peut être observé en ouvrant l’invite de commandes 32 bits depuis C:\Windows\SysWOW64\cmd.exe. Dans cette fenêtre, echo %PROCESSOR_ARCHITECTURE% renvoie x86, tandis que l’invite de commandes 64 bits standard indique AMD64. L’exécution de dir C:\Windows\System32\kernel32.dll dans les deux fenêtres affiche des tailles de fichier différentes, bien que le même chemin ait été saisi, car le processus 32 bits est redirigé vers la copie située dans SysWOW64.


Même Matt Pietrek, alors membre de l’équipe Visual Studio de MS, a rencontré ce comportement. Dans un article de MSDN Magazine publié en 2006, il expliquait avoir répertorié kernel32.dll dans les deux répertoires depuis une invite de commandes 32 bits et avoir d’abord été perplexe lorsque les résultats semblaient identiques.
WOW64 ne se limite pas à la redirection du système de fichiers. Grâce au redirecteur du Registre, il fournit aux applications 32 bits une vue distincte du Registre sous HKEY_LOCAL_MACHINE\Software\Wow6432Node. Il définit également leur variable d’environnement %ProgramFiles% sur Program Files (x86).

MS signale une exception inhabituelle liée au contrôle de compte d’utilisateur. Si l’ouverture d’un fichier redirigé déclenche une invite UAC, la redirection n’a pas lieu et Windows lance à la place la version 64 bits. Les développeurs doivent donc spécifier le chemin SysWOW64 ou exécuter l’application 32 bits en tant qu’administrateur lorsque cela est approprié.
Utilisation du répertoire virtuel Sysnative
Sysnative est un répertoire virtuel accessible uniquement aux applications 32 bits. Il n’existe pas physiquement sous C:\Windows et les applications 64 bits ne peuvent pas y accéder. La saisie de C:\Windows\Sysnative dans la barre d’adresse de l’Explorateur de fichiers 64 bits génère une erreur, tandis que dir C:\Windows\Sysnative\cmd.exe fonctionne depuis une invite de commandes 32 bits.

Les développeurs peuvent désactiver la redirection en appelant la fonction Wow64DisableWow64FsRedirection, mais cette opération affecte toutes les opérations sur les fichiers du thread actuel. MS avertit que la désactivation de la redirection du système de fichiers peut empêcher le chargement des DLL.
Chen a décrit Sysnative comme « une solution locale à un problème local ». Il avait auparavant conseillé aux développeurs de ne pas lutter contre l’émulateur et recommandé qu’un programme d’installation 32 bits lance un programme d’installation 64 bits lorsque des opérations 64 bits natives sont nécessaires. De nombreux problèmes de compatibilité surviennent lorsqu’une application 32 bits tente de se comporter comme un processus 64 bits.
Six dossiers System32 sont exemptés de la redirection WOW64
MS identifie six sous-répertoires de System32 auxquels les applications 32 bits peuvent accéder sans être redirigées. La liste des exemptions a évolué au fil du temps. Par exemple, driverstore était redirigé sous Windows Vista, Windows XP, Windows Server 2003 et Windows Server 2008.
MS n’explique pas la raison de chaque exemption. Cependant, certains de ces répertoires contiennent des données partagées auxquelles les applications 32 bits et 64 bits doivent accéder de manière cohérente, comme le fichier hosts situé sous drivers\etc.
SysArm32 est supprimé de Windows 11 sur Arm
Sur les ordinateurs basés sur Arm, tels que les PC portables Snapdragon X, les applications x86 32 bits utilisent également SysWOW64. Historiquement, les applications Arm 32 bits étaient redirigées vers un troisième répertoire nommé SysArm32.
Sur les systèmes Arm64, WOW64 traduit le code x86 au moyen d’un émulateur nommé xtajit.dll. En comparaison, les processeurs x64 exécutent nativement le code 32 bits, Wow64Cpu.dll gérant la transition entre les modes d’exécution, selon la documentation technique de MS.
La documentation de MS destinée aux développeurs Arm indique désormais que les PC Arm ne prennent plus en charge les applications Arm 32 bits. Les fichiers binaires système auparavant stockés dans le répertoire SysArm32 sont également en cours de suppression. Les applications x86 standard, dans leurs versions 32 bits comme 64 bits, continuent de fonctionner grâce à l’émulation Prism, qui a bénéficié l’année dernière de la prise en charge d’AVX et d’AVX2.
La compatibilité prime sur des noms plus explicites
MS aurait pu renommer System32 il y a vingt ans, mais cela aurait rendu de nombreuses applications existantes inutilisables. L’entreprise a préféré créer un redirecteur, un alias virtuel et un ensemble d’exemptions autour du nom de répertoire existant. Cette décision reflète la même approche axée sur la compatibilité qui a permis de conserver des composants tels que le gestionnaire de tas de Windows 95 pour les anciens logiciels.
Toutes les applications n’ont pas survécu à la transition vers Windows 64 bits, 3D Pinball constituant un exemple notable. Même si un nom comme SysExec aurait été plus clair, un nom de répertoire obsolète est moins préjudiciable que des défaillances généralisées d’applications et de programmes d’installation.

