WOW64
別名:ワウ64
WOW64とは、64ビット版のWindows上で32ビットアプリケーションの実行環境をエミュレートするシステムの名称である。
64ビット版Windowsは、それ自体は64ビットの実行環境のみサポートしており、32ビットアプリケーションをサポートしていない。そこで、WOW64が仮想的に32ビットの実行環境を提供し、32ビットアプリケーションを実行可能にしている。これによって、従来の32ビット版Windows向けのアプリケーションのほとんどを64ビットマシンで動作させることが可能になり、高い互換性を実現している。
WOW64は64ビット版Windowsに標準で搭載されており、32ビットアプリケーションの実行時に自動的に機能する。
ちなみに、Windows 7 Professional、Windows 7 Ultimate、およびWindows 7 Enterpriseの各エディションには、Window XP向けのアプリケーションを動作させるための仮想マシンとして「Windows XPモード」と呼ばれる機能が搭載されている。Windows XPモードを利用するには、Windows Virtual PCなどの仮想化ソフトウェアも必要となる。
参照リンク
WOW64 とは? - (Microsoft Marketplace "Preview")
Windows: | Windows 2.0 Windows 7 Windows 8 WOW64 Windows 9 Windows 1.0 Windows OS |
WOW64
![]() | この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2020年11月) |
WOW64(ワウ64、Windows 32-bit On Windows 64-bit)とは、64ビット (x64、ARM64、IA-64) 版のMicrosoft WindowsにおいてWin32アプリケーションを実行する、エミュレーションレイヤーサブシステムである。
概要
64ビット版のWindowsは基本的に、完全に64ビット化されたNTカーネルで動作する。x64やIA-64対応のオペレーティングシステムでは、x86の32ビットABIに対応するかどうかの選択を迫られることとなった。64ビットのWindowsでは、64ビットABIと32ビットABIの両方に対応し、Win32 APIをWin64 APIに呼び変えるエミュレーション層が実装されている。これがWOW64である。これにより、32ビットアプリケーションはそのまま64ビットのWindowsでも動作する。
以下のサンク (thunk) レイヤーが用意されている。提供されるモジュールの一部はx64/ARM64/IA-64でそれぞれ異なる[1]。
- 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のエミュレーションレイヤーの提供も計画されている[2]。
構造
WOW64は、WOW64ホストプロセスによって予約された4GBの仮想空間に32ビットABIのコードを読み込み、そこで発生したWin64 APIに変換可能なAPI呼び出しを変換して、Win64サブシステムに伝達する。構造体の変換は自動的に行われ、Win32側では現在動作しているOSが32ビットシステムか、64ビットシステムかを意識する必要は全くない。またユーザーモードで動作するコンポーネント群は32ビット版と64ビット版が用意され、例えばOLEなどは32ビットで閉じた範囲で動作できる。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のコードとの相互な呼び出しを禁止している(サンクによって間接的な呼び出しは可能であるが、x64アーキテクチャで本来可能であった32ビットコードと64ビットコードのシームレスな相互呼び出し機能は全く生かされていない)。この顕著な例として、Internet Explorer (IE) の振る舞いが挙げられる。32ビットのActiveXコンポーネントを検出すると、64ビット版IEは処理を中断して32ビット版IEに処理を引き継ぐ。32ビットアプリケーションと64ビットアプリケーションの間には、実行ファイル以外のコンポーネント群を互いに利用することができない深い溝がある。
プログラミング
16ビット (Win16) から32ビット (Win32) への過渡期に用意されたサンクメカニズムはシステムの不安定化の原因となっていたため、WOW64では提供されず、32ビットコードと64ビットコードは1つのプロセス内に共存できない。32ビットのプロセスと64ビットのプロセスとの通信は、アウトプロセスCOM(DCOM)またはWCFなどによるRPCやDLLプロキシCOMサーバーをはじめとして、各種のプロセス間通信が使用可能である[3]。なお、一部のハンドル値(ウィンドウハンドルHWND
など)は下位32ビットのみが有効値として使用されるため、Win32/Win64で共有することができる。
システムフォルダーとレジストリ
2010年現在の64ビットWindowsでは、Windowsシステムフォルダー (%systemroot%\System32) には64ビットのバイナリが置かれ、32ビットプログラムはその中にあるファイルには直接アクセスすることができない。32ビットプログラムによるSystem32フォルダーへのアクセスは、自動的に%systemroot%\SysWOW64へとリダイレクトされる動作となり、プログラムからはSystem32フォルダーにアクセスしているように見える。SysWOW64フォルダーには32ビットのバイナリが用意されている。なお、後方互換性の理由から、64ビットのシステムフォルダーであるにもかかわらず「System32」という名前になっている[4]。
Windowsレジストリへ32ビットアプリケーションがアクセスする場合は、一部リダイレクトされる。HKLM\SOFTWAREとHKCR\下のレジストリキーへのアクセスは、それぞれWow6432Nodeと呼ばれるキーの配下にアクセスしている。
脚注
- ^ WOW64 Implementation Details - Win32 apps | Microsoft Docs
- ^ Introducing x64 emulation in preview for Windows 10 on ARM PCs to the Windows Insider Program | Windows Insider Blog
- ^ “Interprocess communication - Win32 apps” (英語). Microsoft Docs. マイクロソフト (2018年5月31日). 2021年4月11日閲覧。
- ^ Why do 64-bit DLLs go to System32 and 32-bit DLLs to SysWoW64 on 64-bit Windows?
外部リンク
「Windows-On-Windows 64」の例文・使い方・用例・文例
- 538‐6647に電話してください
- タンザニアは1964年に家族社会主義という政策を採用しました。
- Windows 7 64ビット用
- 4の 3 乗は 64 である.
- シェイクスピアの生没年は 1564 年生まれで 1616 年没である.
- 第 1 インターナショナル (1864‐76).
- ロンドンの大疫病 《1664‐1665 年》.
- その文書はシェイクスピアは 1564 年 4 月 23 日に生まれたと記録している.
- 1964 年の東京オリンピックは日本の文物に対する関心に拍車をかけた.
- 最近のパソコンは 640 キロバイト以上のメモリーを持っている.
- 英国人は、1640年に司法拷問を放棄した
- 1649年に当地はオリバー・クロムウェルに占領され、カトリック教徒の住民が虐殺された
- 南北戦争中の戦い(1864年)
- 1644年の戦いで、マンチェスター伯の率いる議会派がルパート王子の率いる王党派を破った
- 1645年の戦いで、議会派が王党派に大勝利したことで、最初の英国ピューリタン革命に終止符を打った
- 米国南北戦争の最終軍事行動(1864年−65年)
- 三十年戦争における戦い(1643)
- プロテスタントとカトリック教徒との一連の争い(1618年−1648年)で、ドイツで始まり、フランス、デンマーク、スウェーデンにまで広がり、神聖ローマ帝国とスペインと対立した
- 順序を数える際の序数64
- 64のますが互い違いに2色に塗られているボード
- Windows-On-Windows 64のページへのリンク