知識マップ: Arm版Windowsで業務アプリは動くのか ── x64エミュレーション(Prism)とネイティブDLL・COMの現実

記事「Arm版Windowsで業務アプリは動くのか ── x64エミュレーション(Prism)とネイティブDLL・COMの現実」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

Windows on Armは、OS組み込みのx86/x64エミュレーション(24H2以降はPrism)によってユーザーモードのアプリを無修正で実行しますが、カーネルモードドライバーやシェル拡張・IMEのように他プロセスへロードされるDLLはエミュレーションの対象外でArm64ネイティブが必須です。1つのプロセスの中でx64とArm64のバイナリは混在できないという原則があり、Arm64ECとArm64Xはこの制約を緩和して、COMインプロセスサーバーのような両対応が必要なDLLに使われます。.NETはRID win-arm64でネイティブ発行できますが、AnyCPUアプリがArm64プロセスとして実行されるとx64専用のネイティブDLLのP/Invokeが失敗し、BadImageFormatExceptionとして現れます。行き詰まった開発者にはApp Assureという支援窓口があります。

Arm版Windowsでの業務アプリ互換性の知識マップWindows on Armのx86/x64エミュレーションがユーザーモードのアプリを無修正で動かす一方、カーネルモードドライバーやシェル拡張はArm64ネイティブが必須であること、1プロセス内でx64とArm64を混在できずArm64EC・Arm64Xがその制約を緩和すること、.NETのwin-arm64発行とAnyCPU+P/Invokeの組み合わせ問題、App Assureによる支援の関係を示す図。利用する利用する前提とする両立しない両立しない利用する利用する前提とする軽減する軽減する前提とする軽減する利用する前提とする利用する原因になり得る原因になり得るで確認できる推奨される対応前提とするWindows on Armx86/x64エミュレーションPrism(エミュレーター)ユーザーモードカーネルモードシェル拡張・IME等(他プロセスにロードされるDLL)WOW64Copilot+ PCプロセス内アーキテクチャ混在の制約Arm64ECArm64XCOMインプロセスサーバーCOM LocalServer(別プロセスCOMサーバー)RID win-arm64.NET(Core以降).NET FrameworkAnyCPUとP/Invokeの組み合わせ問題BadImageFormatExceptionRuntimeInformation.ProcessArchitecture/OSArchitectureApp AssureFastTrack

概念間の関係(全20件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

Windows on Arm
Arm64プロセッサー上で動作するWindowsのこと。Copilot+ PCなどSnapdragon搭載機の普及により、開発者が意識せざるを得ない存在になった。
x86/x64エミュレーション
Windows 11 on Armに組み込まれた、x86/x64のユーザーモードアプリを無修正で実行するエミュレーション機能。x86命令ブロックをArm64命令へJITコンパイルし、モジュールごとにキャッシュする。
Copilot+ PC
毎秒40兆回以上の演算(40+ TOPS)が可能なNPUを搭載したWindows 11 PCの新カテゴリー。多くがArmベースのSnapdragon Xシリーズを採用している。
Arm64EC
x64の呼び出し規約・スタック使用・データレイアウトに従うことで、同一プロセス内でエミュレーション実行されるx64コードと混在できるネイティブArm64コードのABI。
Arm64X
従来のArm64コードとArm64ECコードを1つのPEファイルに同居させ、x64プロセスにもArm64プロセスにもロードできるバイナリ形式。
COMインプロセスサーバー
DLLとして実装され、呼び出し元プロセスに直接ロードされるCOMサーバーの形態。プロセス内アーキテクチャ混在の制約をそのまま受ける。
COM LocalServer(別プロセスCOMサーバー)
COMサーバーをEXEとして別プロセスで動かす形態。bitnessの壁を越えたり、クラッシュを隔離したりできる。レジストリのCLSID配下のLocalServer32キーにEXEパスを登録する。
RID win-arm64
.NETのpublish時にArm64ネイティブの実行ファイルを生成するために指定するランタイム識別子(RID)。
.NET Framework
Windowsのコンポーネントとして扱われ、インストールされているOSのライフサイクルに沿ってサポートされるランタイム。System.Messagingの対象範囲。
AnyCPUとP/Invokeの組み合わせ問題
AnyCPUの.NETアプリがArm64ランタイムでArm64プロセスとして実行される際、x64専用のネイティブDLLをP/Invokeしていると読み込みに失敗する組み合わせ問題。
App Assure
MicrosoftのFastTrackに含まれるアプリ互換性支援プログラムで、対象プランの組織はWindowsやEdgeなどへの移行で生じた互換性問題の修復支援を追加費用なしで受けられる。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。