Windowsの「System32」フォルダと「SysWOW64」フォルダの違いは何ですか?

64ビットバージョンのWindowsでは、2つの別々のProgramFilesフォルダーがあります。しかし、それだけではありません。また、DLLライブラリと実行可能ファイルが格納される2つの別個のシステムディレクトリ、System32とSysWOW64があります。名前にもかかわらず、System32は64ビットファイルでいっぱいであり、SysWOW64は32ビットファイルでいっぱいです。では、何が得られるのでしょうか?

System32とは何ですか?

関連:DLLファイルとは何ですか?PCから1つが欠落しているのはなぜですか?

System32ディレクトリには、プログラムで使用される.DLLライブラリファイルとWindowsの一部である.EXEプログラムユーティリティの両方のWindowsシステムファイルが含まれています。ここにあるファイルのほとんどはWindowsオペレーティングシステムの一部ですが、サードパーティのソフトウェアプログラムが独自のDLLファイルをこのフォルダにインストールすることもあります。

システムで実行されているアプリケーションは、Program Filesフォルダーまたは他の場所にインストールできますが、多くの場合、System32フォルダーからシステム全体のライブラリをロードします。

32ビットライブラリと64ビットライブラリの分離

関連:Windowsの「ProgramFiles(x86)」フォルダと「ProgramFiles」フォルダの違いは何ですか?

64ビットバージョンのWindowsには、64ビットプログラムとそのファイルを含むC:\ Program Filesフォルダーと、32ビットプログラムとそのファイルを含むC:\ Program Files(x86)フォルダーがあります。64ビットプログラムには64ビットDLLファイルが必要であり、32ビットプログラムには32ビットDLLファイルが必要であるため、これらのファイルを分離すると便利です。

32ビットプログラムが必要なDLLファイルをロードし、64ビットバージョンを見つけてロードしようとすると、クラッシュします。Windowsは、64ビットソフトウェアと32ビットソフトウェアを2つの異なるProgram Filesフォルダーに分割することにより、それらが混同されて問題が発生しないようにします。

ただし、すべてのDLLファイルがProgramFilesに保存されているわけではありません。Windowsに含まれている多くのシステム全体のライブラリはC:\ System32に保存されており、一部のプログラムは独自のライブラリファイルもここにダンプします。したがって、Windowsに32ビットと64ビットの個別のProgram Filesフォルダーがあるのと同様に、32ビットバージョンと64ビットバージョンのSystem32フォルダーも個別にあります。

System32およびSysWOW64

32ビットコンピューターでは、すべての32ビットプログラムはファイルをC:\ Program Filesに格納し、システム全体のライブラリの場所はC:\ System32です。

64ビットコンピューターでは、64ビットプログラムはファイルをC:\ Program Filesに格納し、システム全体のC:\ Windows \ System32フォルダーには64ビットライブラリが含まれています。32ビットプログラムはファイルをC:\ Program Files(x86)に保存し、システム全体のフォルダーはC:\ Windows \ SysWOW64です。

これは間違いなく直感に反します。名前に「32」が含まれているにもかかわらず、System32フォルダーには64ビットライブラリが含まれています。また、名前に64が含まれているにもかかわらず、SysWOW64フォルダーには32ビットライブラリが含まれています(少なくとも64ビットバージョンのWindowsでは)。

一般的に、これを知る必要はありません。使用するWindowsオペレーティングシステムとプログラムは、ファイルを正しい場所に自動的に配置し、正しいフォルダーを使用します。ただし、DLLファイルを正しい場所に手動でインストールする必要がある場合、またはDLLファイルがインストールされている場所を見つける必要がある場合(これは非常にまれです)、どちらがどれであるかを知る必要があります。

WOW64、説明

関連:64ビットバージョンのWindowsでほとんどのプログラムが32ビットのままであるのはなぜですか?

ここでの名前の「WOW64」の部分は、オペレーティングシステムの一部であるMicrosoftの「Windows32ビットオンWindows64ビット」ソフトウェアを指します。これにより、Windowsは64ビットバージョンのWindowsで32ビットプログラムを実行できます。WoW64は、プログラムが正しく機能するようにファイルアクセスをリダイレクトします。

たとえば、32ビットプログラムを64ビットバージョンのWindowsにインストールし、それがC:\ Program Filesフォルダーに書き込もうとした場合、WoW64はそれをC:\ Program Files(x86)にポイントします。また、C:\ Windows \ System32フォルダーにアクセスする場合、WoW64はC:\ Windows \ SysWOW64をポイントします。Windowsは、ファイルシステムリダイレクタを使用してこれを行います。

これはすべて、バックグラウンドで自動的かつ透過的に行われます。プログラムは、64ビットオペレーティングシステムで実行されていることを知る必要さえありません。これにより、古い32ビットプログラムを64ビットバージョンのWindowsで変更せずに実行できます。WOW64はまた、レジストリアクセスをリダイレクトし、64ビットプログラムと32ビットプログラム用にレジストリの個別の領域があることを確認します。

では、なぜSystem32 64ビットとSysWOW6432ビットなのですか?

百万ドルの質問に戻ると、「System32」フォルダが64ビットでSysWOW64が32ビットなのはなぜですか。

答えは、多くの32ビットアプリケーションがC:\ Windows \ System32ディレクトリを使用するようにハードコーディングされているようです。開発者がこれらのアプリケーションを64ビットバージョンのWindows用に再コンパイルしたとき、開発者は引き続きC:\ Windows \ System32ディレクトリを使用しました。

マイクロソフトは、ディレクトリの名前を変更して開発者に新しいディレクトリへの移動を強制し、その過程で多くのアプリケーションを壊すのではなく、「System32」を標準のシステムライブラリディレクトリとして残しました。彼らは、WoW64レイヤーの下で実行されるアプリケーション用に、「SysWOW64」という名前の新しいライブラリディレクトリを作成しました。このように考えると、名前の意味がわかります。

はい、名前に「32」が含まれるディレクトリが64ビットになったことは少しばかげています。おそらくMicrosoftは、90年代にC:\ Windows \ System32と名付けたときにそれが来るのを見るべきだったでしょう。しかし、もっと単純な命名スキームがあればいいのですが、たくさんのプログラムを壊して、そこにたどり着くためだけに開発者のためにもっと多くの作業を作成する価値はありません。つまり、当面の間、System32とSysWOW64を使い続けることになります。