WoW64サブシステムとARM64 ♯1

Windows 10までは、ARM64 CPUのシステムでは、エミュレーションの機能によりx86アプリは動作しましたが、x64アプリは動作しませんでした。Windows 11でARM64 CPUのシステム上でx64アプリを動作させるためのエミュレーション機能が実装されました。そこで、Wow64に関するAPIの振る舞いを確認してみました。

WoW64 (Windows 32-bit on Windows 64-bit) サブシステム

64ビットWindowsが異なるアーキテクチャーの32ビットCPUの32ビットアプリを動作するようにエミュレーションする機能はWoW64 (Windows 32-bit on Windows 64-bit) サブシステムと呼ばれています。

x64の64ビットWindowsシステム上で、x64アプリ(64ビットアプリ)が動作するのは当たり前です。Windowsの32ビットから64ビットの移行時は、過去の資産を生かすためには、x86アプリ(32ビットアプリ)が64ビットWindows上で動作させることが必要でした。それを実現する仕組みとして、64ビットWindowsにWoW64サブシステムが用意されました。

Windows 10のWoW64サブシステム

Windows 10のWoW64サブシステムでは、x64の64ビットWindowsの場合は、x86の32ビットアプリが動作しました。ARM64の64ビットWindowsの場合はARM32とx86の32ビットアプリが動作しました。

Windows 11のWoW64サブシステム

Windows 11のWoW64サブシステムでは、ARM64の64ビットWindowsの場合は、さらにx64の64ビットアプリも動作するようになりました。64ビットアプリが動作するため、WoW64のもともとの名前の由来のWindows 32-bit on Windows 64-bitは、Windows on Windows 64-bitが適切なのかもしれません。

Windows 10 / 11のWoW64サブシステムのまとめ

まとめると以下の表になります。

64ビット Windows 1064ビット Windows 11
x64 64ビット CPUx86アプリx86アプリ
ARM64 64ビット CPUx86アプリ、ARM32アプリx86アプリ、ARM32アプリ、x64アプリ
WindowsのWoW64でサポートしているアプリのアーキテクチャ

この表からは、ARM64 CPUのWindows 11では、エミュレーションでx86アプリ、ARM32アプリ、x64アプリが動作することがわかり、また、ネイティブでARM64アプリが動作するので、すべてのアーキテクチャーのアプリが動作することがわかります。

実際にARM64 CPUのWindows 11のタスクマネージャーで、実行しているアプリのアーキテクチャーの確認すると以下のように、各アーキテクチャーのアプリがすべて動作していることがわかります。

Arm64のWindows 11のタスクマネージャー
(x86アプリ、x64アプリ、Arm32アプリ、Arm64 アプリのすべてが動作中)

WoW64に関するAPI

WoW64に関するAPIがいくつかあります。

たとえば、実行中のアプリがどのシステム(NativeシステムなのかWoW64サブシステムなのか)上で動作しているかを調べるAPIや、現在アプリを実行中のWindowsのWoW64サブシステムがどのアーキテクチャをサポートしているかなどを調べるAPIなどです。

具体的には以下のAPIがあります。

各CPUアーキテクチャーでビルドしたテストアプリでこれらのAPIを呼び出して、各Windowsの振る舞いを確認したいと思います。

WoW64に関するテストツール

前述したWoW64に関連する5つのAPIを確認するテストツールを作成しました。WoW64Testです。このテストツールは、動作確認の為にx86 / x64 / ARM32 / ARM64の4つのCPUアーキテクチャーでビルドしたものを用意しました。このテストツールは、このサイトのツールのページで公開しています。

このWoW64Testツールを、下記の環境で動作させて、各APIの挙動を確認しました。

  • 32ビットWindows 10 on x64 CPU
  • 64ビットWindows 10 on x64 CPU
  • 64ビットWindows 11 on x64 CPU
  • 64ビットWindows 10 on ARM64 CPU
  • 64ビットWindows 11 on ARM64 CPU

Windows 11は、32ビット版が存在しないので、64ビット版のみの確認となります。Windows 10は、32ビット版と64ビット版が入手可能なx86/x64については両方を確認し、ARMについては64ビット版しか入手できなかったため、64ビット版のみの確認となります。

上記の各WindowsのWindowsシステムとサポートしているWoW64サブシステムの関係は以下の表にようになります。

CPUWindowsWindowsシステムWoW64サブシステム
x6432ビットWindows 10x86
x6464ビットWindows 10x64x86
x6464ビットWindows 11x64x86
ARM6464ビットWindows 10ARM64ARM32, x86
ARM6464ビットWindows 11ARM64ARM32, x86, x64
各WindowsのシステムとサポートしているWoW64サブシステム

上記の関係から、x86 / x64 / ARM32 / ARM64 のCPUアーキテクチャーでビルドしたアプリの各Windowsシステムでの動作可否は以下のようになります。

x86アプリx64アプリARM32アプリARM64アプリ
32ビットWindows 10
on x64 CPU
可 (Native)
64ビットWindows 10
on x64 CPU
可 (Native)
64ビットWindows 11
on x64 CPU
可 (Native)
64ビットWindows 10
on ARM64 CPU
可 (Native)
64ビットWindows 11
on ARM64 CPU
可 (Native)
各CPUアーキテクチャーでビルドしたアプリの動作の可否

あるCPUアーキテクチャーでビルドしたアプリの実行をサポートしていないWindows上で、アプリを起動しようとすると、以下のようなダイアログが表示され、実行できないことが通知されます。

WoW64 Test App (ARM64) on Windows 11 (x64)

各CPUアーキテクチャーでビルドしたアプリの動作条件がわかったので、次回は、実際に各APIの動作を見ていきます。


今回の投稿では、WoW64サブシステムの概要と関連するAPI、および、テストツールについて紹介しました。次回の投稿では、このテストツールを使って、各Windowsで各APIの実際の動作を確認したいと思います。

“WoW64サブシステムとARM64 ♯1” への1件の返信

コメントを残す