1. ホーム
  2. dll

[解決済み】64ビットWindowsで64ビットDLLはSystem32に、32ビットDLLはSysWoW64に入るのはなぜですか?

2022-04-04 19:04:54

質問

の下にファイルを置く必要があるのはどのような場合か、教えてください。

64bitのWindowsならC:⇄WindowsSystem32かC:⇄WindowsSysWOW64です。

32ビット用と64ビット用の2つのDLLを持っていました。

論理的には、32bitのDLLをC:⇄WindowsSystem32に、64bitのDLLをC:⇄WindowsSysWOW64に配置しようと思ったんだ。

驚いたことに、それは ! は 32 -ビットの方はC:㊙WindowsSysWOWに入ります。 64 で、その 64 -ビットDLLはC:³³に入ります。 32 .

非常に分かりにくい内容ですね。この背景には何があるのでしょうか?

解決方法は?

System32 の名前を変更することが意図されていたと思いますが、多くのアプリケーションがそのパスをハードコードしていたため、削除することは実行不可能でした。

SysWoW64は64ビットシステムのDLLを意図したものではなく、実際には"Windows on Windows64"のようなもので、64ビットWindows上で32ビットアプリケーションを実行するために必要なビットを意味します。

この記事 が少し解説しています。

Windows x64にはSystem32というディレクトリがあり、そこには64ビットのDLLが含まれています(sic!)。したがって、ビット数が 64 のネイティブ・プロセスは、System32 フォルダにある DLL を期待どおりに見つけることができます。もう1つのディレクトリSysWOW64には、32ビットのDLLが格納されています。ファイルシステムリダイレクトは、32ビットプロセス用に本物のSystem32ディレクトリを隠し、System32."という名前でSysWOW64を表示するというマジックを行います。

編集部:インストーラのことなら、本当に はいけません。 システムフォルダへのパスをハードコードしてください。代わりに、インストーラがエミュレーション層で実行されているかどうかに基づいて、Windowsがそれを処理するようにします。