WOW64(ワウ64、Windows-On-Windows 64)とは、64ビット版のMicrosoft Windows(Windows XP、Windows Server 2003及びWindows Vistaの一部)においてWin32アプリケーションを実行する、エミュレーションレイヤー・サブシステムである。
目次
1 概要
2 構造
3 問題点
4 プログラミング
5 リンク
//
64ビット版のWindowsは基本的に、完全に64ビット化された64ビットNTカーネルの上にある、Win64サブシステムで動作する。他のx64対応オペレーティングシステムが、32ビットABIを完全に見捨てるか、あるいは完全に互換性を取るかのいずれかの選択をした。64ビットのWindowsでは、64ビットABIと32ビットABIの両方をサポートし、Win32APIをWin64APIに呼び変えるエミュレーション層を実装した。これにより、32ビットアプリケーションはそのまま64ビットのWindowsでも動作する。
WOW64は、WOW64ホストプロセスによって予約された4GBの仮想空間に32ビット ABIのコードを読み込み、そこで発生したWin64 APIに変換可能なAPI呼び出しを変換して、Win64サブシステムに伝達する。構造体のトランケート・エキスパンドは自動的に行われ、Win32側では現在動作しているOSが32ビットシステムか、64ビットシステムかを意識する必要は全くない。またユーザーランドで動作するコンポーネント群は32ビット版と64ビット版が用意され、例えばOLEなどは32bitで閉じた範囲で動作する事ができる。64ビット版で提供されるコードは単一のソースから、32ビット版と64ビット版両方をそれぞれコンパイルして作られている為、機能的には32ビットシステムと64ビットシステムの間に差異は無い。
Windowsの64ビットABIは、そのままWin32の32ビットABIを64ビットに拡張した物である。従って、64ビットABIのアプリケーションは8TBのアドレス空間を独占的に使える様になっている。ここに一つの問題点がある。32ビット ABIのコードを格納可能な仮想空間下位4GBが64ビットABIに独占されてしまった事である。この為、32ビットABIを格納する場所が無く、32ビットアプリケーションはもとより、DLLやOCXをロードして呼び出す事も出来なくなってしまった。事実マイクロソフトは、32ビットABIのコードと64ビットABIのコードを相互に呼び出す事を禁止している(COMインターフェースを経由して相互乗り入れは可能であるが、x64アーキテクチャで本来可能であったシームレスな32ビットコードと64ビットコードの相互呼び出し機能は全く生かされていない)。この顕著な例として、Internet Explorerの振舞があげられる。32ビットのActiveXコンポーネントを検出すると、64ビット版Internet Explorerは処理を中断して32ビット版Internet Explorerに処理を引き継ぐ。32ビットアプリケーションと64ビットアプリケーションの間には、実行ファイル以外のコンポーネント群を互いに利用する事が出来ない深い溝がある。
16bit時代から32bitへの過渡期に用意されたthunkメカニズムはWOW64では提供されていない。 その代わり異なるABI間の呼び出しは、外部プロセスCOMインターフェースによって可能である。 なお前述の通り基本的にInprocサーバーは使用できない。 外部プロセスCOMインターフェースにより、ABI間のマーシャリングがMIDL情報を元にWOW64によって行われ、例えば64ビットプロセスから32ビットプロセスのメソッドを呼び出す事ができる(逆も可能である)。 この機能は非常に重要な機能を提供する。 2007年現在、Windowsアプリケーションやミドルウエアの殆どはx64に移植されていない。 よってこれらのソフトウエア資源を継承しつつ、x64に対応したアプリケーションを開発するには、WOW64の機能を使って32bitソフトウエア資源へのアクセスを確保し、64ビットアプリケーションに対してCOMインターフェースの形で提供する事で、異なるABIが混在する過渡期を乗り越える事ができる。 またCOMインターフェースの形をとる事により、.NET Frameworkへのアクセスも用意できる。
リンク
⇒Running 32-bit Applications - Platform SDK: 64-bit Windows Programming - MSDN Library
表・話・編・歴Windowsコンポーネント
コアAero ・ ClearType ・ DWM ・ DirectX ・ Windows デスクトップサーチ ・ エクスプローラ ・ シェル(シェル名前空間 ・ スタートメニュー ・ タスクバー ・ 特殊フォルダ ・ 関連付け ・ GDI ・ Windows Imaging Format ・ 次世代TCP/IPスタック ・ .NET Framework ・ 音声 ・
アプリケーションとツールバックアップと復元センター ・ 電卓 ・ カレンダー ・ 文字コード表 ・ Cmd.exe ・ Contacts ・ コントロールパネル ・ アプレット ・ スキャンディスク ・ デバイスマネージャ ・ ディスク クリーンアップ ・ デフラグ ・ DVDメーカー ・ イベントビューア ・ FAXとスキャン ・ Windows 画像とFAX ビューア ・ Internet Explorer ・ Mail ・ 拡大鏡 ・ 管理コンソール ・ Media Center ・ ミーティングスペース ・ Windows Mobileデバイスセンター ・ Mobility Center ・ ムービーメーカー ・ ナレータ ・ メモ帳 ・ ペイント ・ フォトギャラリー ・ PowerShell ・ 外字エディタ ・ 問題の報告と解決 ・ リモートアシスタンス ・ サイドバー ・ Snipping Tool ・ サウンド レコーダー ・ Sysprep ・ システム構成ユーティリティ ・ システムファイルチェッカー ・ システムの復元 ・ UNIXサブシステム ・ Windowsインストーラ ・ Windows Media Player ・ 音声認識 ・ タスクマネージャ ・ Microsoft Update/Windows Update ・ ワードパッド ・ WinSAT ・ Windows Journal
カーネルNtoskrnl.exe ・ HAL ・ アイドルプロセス ・ Svchost.exe ・ レジストリ ・ Windowsサービス ・ サービスコントロールマネージャ ・ WOW/WOW64 ・ DLL ・ EXE ・ NTLDR/ブートマネージャ ・ Winlogon ・ 回復コンソール ・ I/O ・ WinRE ・ WinPE ・ カーネルパッチ保護