WOW64(ワウ64、Windows 32-bit On Windows 64-bit)とは、64ビット (x64およびIA-64) 版のMicrosoft Windows(Windows XP、Windows Server 2003、Windows Vista、Windows Server 2008、Windows 7の一部)においてWin32アプリケーションを実行する、エミュレーションレイヤー・サブシステムである。
64ビット版のWindowsは基本的に、完全に64ビット化されたNTカーネルで動作する。x64やIA-64対応のオペレーティングシステムでは、x86の32ビットABIに対応するかどうかの選択を迫られることとなった。64ビットのWindowsでは、64ビットABIと32ビットABIの両方に対応し、Win32APIをWin64APIに呼び変えるエミュレーション層が実装されている。これがWOW64である。これにより、32ビットアプリケーションはそのまま64ビットのWindowsでも動作する。
セットを手の平OTオッズは何ですか
WOW64は、WOW64ホストプロセスによって予約された4GBの仮想空間に32ビットABIのコードを読み込み、そこで発生したWin64 APIに変換可能なAPI呼び出しを変換して、Win64サブシステムに伝達する。構造体の変換は自動的に行われ、Win32側では現在動作しているOSが32ビットシステムか、64ビットシステムかを意識する必要は全くない。またユーザーモードで動作するコンポーネント群は32ビット版と64ビット版が用意され、例えばOLEなどは32ビットで閉じた範囲で動作できる。64ビット版で提供されるコードは単一のソースから、32ビット版と64ビット版両方をそれぞれコンパイルして作られているため、機能的には32ビットシステムと64ビットシステムの間に差異は無い。
クールなゲームを作る方法
あなたは忘却で構築することができる最高の文字<p>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ビットアプリケーションの間には、実行ファイル以外のコンポーネント群を互いに利用することができない深い溝がある。
[編集] プログラミング
16ビット時代から32ビットへの過渡期に用意されたサンク (thunk) メカニズムはWOW64では提供されず、32ビットプログラムと64ビットプログラムは1つのプロセスに共存できない。32ビットのプロセスと64ビットのプロセスとの通信は、アウトプロセスCOMをはじめとして、各種のプロセス間通信が使用可能である[1]。
2010年現在、Windowsアプリケーションやミドルウエアの殆どはx64には移行していない。よってこれらのソフトウエア資源を継承しつつ、x64に対応したアプリケーションを開発するには、WOW64の機能を使って32ビットソフトウエア資源へのアクセスを確保し、64ビットアプリケーションに対してCOMインターフェースの形で提供することで、異なるABIが混在する過渡期を乗り越えることができる。またCOMインターフェースの形をとることにより、.NET Frameworkへのアクセスも用意できる。
[編集] システムフォルダとレジストリ
2010年現在の 64Bit Windows では、Windows システムフォルダ (%systemroot%\System32) には、64 ビットのバイナリが置かれ、32 ビット プログラムは、その中にあるファイルには直接アクセスすることができない。32 ビット プログラムによる System32 フォルダへのアクセスは自動的に %systemroot%\SysWOW64 へとリダイレクトされる動作となる。プログラムから見ると、System32 フォルダにアクセスしているように見える。SysWOW64 フォルダには 32 ビットのバイナリが用意されている。
Windows レジストリへ 32ビット アプリケーションがアクセスする場合は、一部リダイレクトされる。HKLM\SOFTWARE と HKCR\ 下のレジストリ キーへのアクセスは、それぞれ Wow6432Node と呼ばれるキーの中にアクセスしている。
0 件のコメント:
コメントを投稿