32bitゲームを64bit環境で動かすWindowsの仕組みWOW64

Windowsで動くゲームは昔のWindows95/98用ゲームから始まり、ちょっと前のWindowsまで大半のゲームは32bitコードのプログラムです。

今のWindowsを64bit環境で使っている人が多いと思いますが、そのままでは32bitコードのプログラムは動きません。Windows側で「WOW64」というエミュレーションがされます。

WOW64を理解しておくことで昔のゲームを今のパソコンで動かせる可能性が高まります。


WOW64とは

Windows 32bit On Windows 64bitの略。64bitのWindowsで32bitコードのプログラムを動かすエミュレーションの仕組みです。

CPU自体だとx86の64bit化自体は32bitとの互換性が高い状態で拡張されています。加えてWindows側は32bitコードのプログラムの互換性を維持するためにWOW64の仕組みが動いて対応します。

64bit環境で32bitコードのプログラムは以下のような動き、制限があります。

  • 32bitコードのプログラム向けに32bitで扱える仮想メモリ空間が割り当てられる
  • 32bitコードのプログラムと64bitコードのプログラムは1つのプロセス内に混在できない
  • DLLも32bitコードのプログラムは32bitコードのDLLを呼び出す必要がある。32bitコードのプログラムから64bitコードのDLLを呼び出せない
  • Windowsのシステムフォルダやレジストリは32bitコード用に用意されたものにアクセスするようにリダイレクトする

32bitのゲームを64bit環境で動かすときのポイント

古いゲームのインストール先は標準のProgam Filesフォルダにしない

64bit環境では64bitコードのプログラムは C:¥Program Files に、32bitコードのプログラムは C:¥Program Files(x86) にインストールされます。Program Files(x86)やProgram FilesフォルダはWindowsの管理下になっています。

Win95/98向けのような古いゲームをこれらのフォルダにセットアップしようとしても、セットアップが途中で失敗したり、入ってもゲームが動かなかったりします。

古いゲームをセットアップするとき、手動でファイルをコピーしたり、ゲーム付属のインストーラを使うならCドライブ直下にフォルダを作って入れる方が動くことが多いです。


システムフォルダのアクセス先がSysWOW64になる

32bitコードのゲームがWindowsシステムフォルダにアクセスするとき、64bit環境だとWindowsシステムフォルダ(C:¥Windows¥System32)ではなく、SysWOW64(C:¥Windows¥SysWOW64)に自動的に切り替えられます。

SysWOW64フォルダには32bit版のアプリケーションやDLLが保存されています。

ゲームを起動してもDLLが見つからなくてエラーになったり、DLLがうまく配置できない場合は確認しましょう。なお、DLLの問題なら遊ぶゲームの実行プログラムと同じ場所に置くことでもDLLの参照が最優先される仕組みもあります。


レジストリのアクセス先がWow6432Node配下になる

WOW64によりレジストリにアクセスするとき、 Softwareの下に直接ではなく、Wow6432Nodeが間に追加されて自動的に切り替えられます。

64bit環境では32bitコードのプログラムがレジストリを使うときは自動的にWow6432Nodeの下に作られます。

32bit環境で32bitゲームを動かすときのアクセス先

  • HKEY_LOCAL_MACHINE¥Software¥(メーカー名やソフトウェア名)
  • HKEY_CURRENT_USER¥Software¥(メーカー名やソフトウェア名)

64bit環境で32bitゲームを動かすときのアクセス先

    • HKEY_LOCAL_MACHINE¥Software¥Wow6432Node¥(メーカー名やソフトウェア名)
    • HKEY_CURRENT_USER¥Software¥Wow6432Node¥(メーカー名やソフトウェア名)

    もし32bit環境にインストールしたゲーム一式を64bit環境にコピーするとき、レジストリの保存先を変えてみましょう。


    参考にしたWEBページ

    32bitアプリを64bit Windows 7で動かす「WOW64」(ASCII.jp)

    第2回 Win32アプリケーションを実行するWOW64(@IT)

    Next Post Previous Post