WOW64

WOW64とは



WOW64(Windows 32-bit On Windows 64-bit)は、64ビット版Windows上で32ビットのWindowsアプリケーションを実行可能にするためのエミュレーションサブシステムです。64ビット版Windowsの登場に伴い、従来の32ビットアプリケーションとの互換性を保つために導入されました。

概要



64ビット版Windowsは、64ビットのNTカーネル上で動作しますが、WOW64はこのカーネル上で32ビットアプリケーションを実行するための橋渡し役を果たします。具体的には、Win32 APIの呼び出しをWin64 APIに変換するエミュレーション層を設け、32ビットアプリケーションが64ビット環境を意識することなく動作できるようにします。

WOW64は、以下のサンク(thunk)レイヤーを提供します。

Wow64.dll: エミュレーションの中核を担い、`Ntoskrnl.exe`のエントリーポイント関数へのサンクを提供します。
Wow64Win.dll: `Win32k.sys`のエントリーポイント関数へのサンクを提供します。
Wow64Cpu.dll (x64のみ): x86プログラムをx64上で実行するためのサポートを提供します。
IA32Exec.bin (Intel Itaniumのみ): x86ソフトウェアエミュレーターを含みます。
Wowia32x.dll (Intel Itaniumのみ): `IA32Exec.bin`とWOW64間のインターフェースを提供します。
xtajit.dll (ARM64のみ): x86ソフトウェアエミュレーターを含みます。
* wowarmw.dll (ARM64のみ): ARM32プログラムをARM64上で実行するためのサポートを提供します。

x64/IA-64 Windowsはx86エミュレーションレイヤーのみを提供しますが、ARM64 Windowsはx86とARM32の両方のエミュレーションレイヤーを提供します。さらに、ARM64ではx64エミュレーションレイヤーの提供も計画されています。

構造



WOW64は、32ビットABIのコードを4GBの仮想空間に読み込み、そこで発生するAPI呼び出しを64ビットAPIに変換してWin64サブシステムに伝達します。構造体の変換も自動的に行われるため、32ビットアプリケーションは動作環境が32ビット64ビットかを意識する必要はありません。ユーザーモードで動作するコンポーネントは32ビット版と64ビット版が用意され、例えばOLEなどは32ビット環境で完結して動作可能です。

問題点



64ビットABIは、32ビットABIを拡張したものであり、64ビットアプリケーションは8TBのアドレス空間を独占的に利用できます。しかし、これにより32ビットABIを格納する領域が不足し、32ビットアプリケーションがDLLやOCXをロードして呼び出すことが不可能になりました。そのため、32ビットコードと64ビットコードの相互呼び出しは禁止されています。サンクによって間接的な呼び出しは可能ですが、本来x64アーキテクチャで可能だったシームレスな相互呼び出しは実現されていません。

この問題の例として、Internet Explorer(IE)の動作があります。64ビット版IEは32ビットActiveXコンポーネントを検出すると、処理を中断して32ビット版IEに引き継ぎます。このように、32ビットアプリケーションと64ビットアプリケーションの間には、実行ファイル以外のコンポーネントを互いに利用できないという大きな溝が存在します。

プログラミング



16ビットから32ビットへの移行期に提供されたサンクメカニズムはシステムの不安定化を招いたため、WOW64では32ビットコードと64ビットコードを同一プロセス内で共存させることはできません。32ビットプロセスと64ビットプロセス間の通信には、DCOMやWCFなどのRPCやDLLプロキシCOMサーバーといったプロセス間通信が利用可能です。なお、ウィンドウハンドル(HWND)などの一部のハンドル値は、下位32ビットのみが有効値として使用されるため、Win32/Win64間で共有できます。

システムフォルダとレジストリ



64ビットWindowsでは、システムフォルダー(`%systemroot%\System32`)には64ビットのバイナリが格納され、32ビットプログラムは直接アクセスできません。32ビットプログラムがSystem32フォルダーにアクセスすると、`%systemroot%\SysWOW64`にリダイレクトされ、SysWOW64フォルダーには32ビットのバイナリが格納されています。

また、Windowsレジストリへのアクセスもリダイレクトされます。`HKLM\SOFTWARE`や`HKCR`下のレジストリキーへのアクセスは、`Wow6432Node`キーの配下にリダイレクトされます。

まとめ



WOW64は、64ビット版Windowsで32ビットアプリケーションを実行するための重要な技術です。この技術により、旧来のアプリケーションを新しい環境でも利用できるようになり、ユーザーはスムーズな移行が可能になります。ただし、32ビット64ビットの相互運用には制約があるため、プログラマーは注意が必要です。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。