64bit WindowsなのになぜSystem32の中身は64bitなの?

当ページのリンクには広告が含まれています。
64bit WindowsでSystem32が64bit用、SysWOW64が32bit用となる名前と中身の違いを図解したアイキャッチ画像

大昔のアプリがパスを直接書き込んでしまったせいでMicrosoftが名前を変えられなくなったから

64bit版WindowsでSystem32に64bit版のシステムファイルが入るのは、互換性を守るためです。32bitアプリからSystem32へアクセスした場合は、WOW64がSysWOW64へリダイレクトして32bit版のファイルを見せています。

System32は64bit、SysWOW64は32bit

64bit版Windowsのシステムフォルダを覗くと、ちょっとおかしなことに気づきます。

C:\Windows\System32には64bit版のDLLやexeが入っていて、C:\Windows\SysWOW64には32bit版が入っています。名前だけ見ると逆に思えますよね。「32」と付いているフォルダが64bit用で、「64」と付いているフォルダが32bit用です。筆者も最初にこの話を知ったときは、正直「なんでそうなった」と思いました。

フォルダ名実際の中身主な対象
System3264bit版のシステムファイル64bitアプリ
SysWOW6432bit版のシステムファイル32bitアプリ

この表だけ見ると設計ミスのように思えますが、実はちゃんとした理由があります。

System32という名前が残ったのは互換性のため

32bit版Windowsの時代はシステムファイルの置き場所はSystem32一つだけでした。本来アプリはGetSystemDirectoryのようなAPIを呼んでこの場所を調べるべきなのですが、現実には多くの開発者が「どうせC:\Windows\System32で決まってるでしょ」とパスを直接コードに書き込んでいました。

そこに64bit版Windowsが登場します。Microsoftとしては新しく64bit用のフォルダを作ってSystem32を32bit専用に残す、きっとそうしたかったハズです。ただそれをやるとパスを直接コードに書き込んでいた大量の32bitアプリや、それを64bit向けに移植したアプリが軒並み動かなくなる恐れがありました。

そこで採られたのがSystem32はそのまま64bitネイティブ用として使い続け、32bit版のために新しくSysWOW64というフォルダを用意するという方法です。WOWってなんだよ、ワォ!ですか、ってカンジですよね。WOW64でWindows 32-bit On Windows 64-bitだそうです。

名前は変えないけど中身の役割は変える、という玉突き的な解決策です。ちなみにこれと同じことは16bitから32bitに移行したときにも起きていて、当時のSystemフォルダがSystem32に置き換わった経緯があります。歴史は繰り返すというやつですね。その時にWOW (Windows 16-bit On Windows 32-bit)というものができたそうです。

WOWって、なんだかAppleのRosetta 2みたいですね。

32bitアプリのSystem32アクセスはSysWOW64へ転送される

ここで気になるのが、パスをSystem32に直書きしている32bitアプリは64bit版Windowsでどう動くのかという点です。

実はWindowsが裏側でこっそり帳尻を合わせています。32bitプロセスがSystem32にアクセスしようとすると、WOW64が持つ「ファイルシステムリダイレクター」が働いて、アクセス先を自動的にSysWOW64へ差し替えます。アプリ側は何も変更していないのに、実際に読みに行くフォルダはこっそり入れ替わっているわけです。ちなみにWOW64は「32-bit Windows on 64-bit Windows」の略で、64bit環境の中に32bit向けの世界を再現する仕組みを指します。

Microsoft公式ドキュメントによると、リダイレクトの対象になるのは主に次のパスです。

元のパス32bit x86プロセスのリダイレクト先32bit ARMプロセスのリダイレクト先
%windir%\System32%windir%\SysWOW64%windir%\SysArm32
%windir%\lastgood\system32%windir%\lastgood\SysWOW64%windir%\lastgood\SysArm32
%windir%\regedit.exe%windir%\SysWOW64\regedit.exe%windir%\SysArm32\regedit.exe
ファイル システム リダイレクター – Win32 apps | Microsoft Learn

ただしdriverstorespoolなど一部のサブフォルダはこのリダイレクトの対象外です。32bitアプリでもこれらのフォルダは素通しで本物の中身が見えます。

もう一つ面白いのがSysnativeという特殊なパスです。32bitアプリがどうしても本物の64bit版System32を見に行きたい場合、C:\Windows\Sysnativeというパスを使うとリダイレクトを回避できます。これはWOW64だけが認識する仮想的なエイリアスで、64bitアプリからは逆に使えません。

ARM版Windowsだとさらにもう一枚重なる

余談ですが、Copilot+ PCなどのARM版Windowsでは話がもう少し複雑になります。

先ほどの表にもあった通り、ARM版Windowsでは32bit ARMアプリ用にSysArm32という3つ目のフォルダが用意されています。System32が64bit ARMネイティブ用、SysWOW64が32bit x86用、SysArm32が32bit ARM用という三重構造になっているわけです。x86からARMへの移行期らしい、過渡期ならではの仕組みと言えそうです。

ただ、Windows 11 on ArmではArm32アプリのサポート廃止が進んでいるようで、SysArm32のシステムバイナリも削除される方向です。


身近なIT用語の「なんで?」をゆるく知りたい方はIT雑学・ぷちQAカテゴリもあわせてどうぞ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!