知識マップ: 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という支援窓口があります。
flowchart LR
accTitle: Arm版Windowsでの業務アプリ互換性の知識マップ
accDescr: Windows on Armのx86/x64エミュレーションがユーザーモードのアプリを無修正で動かす一方、カーネルモードドライバーやシェル拡張はArm64ネイティブが必須であること、1プロセス内でx64とArm64を混在できずArm64EC・Arm64Xがその制約を緩和すること、.NETのwin-arm64発行とAnyCPU+P/Invokeの組み合わせ問題、App Assureによる支援の関係を示す図。
windows_on_arm["Windows on Arm"]
x86_x64_emulation["x86/x64エミュレーション"]
prism["Prism(エミュレーター)"]
user_mode["ユーザーモード"]
kernel_mode["カーネルモード"]
shell_extension_dll["シェル拡張・IME等(他プロセスにロードされるDLL)"]
wow64["WOW64"]
copilot_plus_pc["Copilot+ PC"]
process_architecture_mixing_restriction["プロセス内アーキテクチャ混在の制約"]
arm64ec["Arm64EC"]
arm64x["Arm64X"]
com_inprocess_server["COMインプロセスサーバー"]
com_localserver["COM LocalServer(別プロセスCOMサーバー)"]
rid_win_arm64["RID win-arm64"]
dotnet[".NET(Core以降)"]
dotnet_framework[".NET Framework"]
anycpu_arm64_pinvoke_mismatch["AnyCPUとP/Invokeの組み合わせ問題"]
badimageformatexception["BadImageFormatException"]
runtimeinformation_api["RuntimeInformation.ProcessArchitecture/OSArchitecture"]
app_assure["App Assure"]
fasttrack["FastTrack"]
windows_on_arm -->|"利用する"| x86_x64_emulation
x86_x64_emulation -.->|"利用する"| prism
x86_x64_emulation -->|"前提とする"| user_mode
x86_x64_emulation -->|"両立しない"| kernel_mode
x86_x64_emulation -->|"両立しない"| shell_extension_dll
x86_x64_emulation -.->|"利用する"| wow64
copilot_plus_pc -.->|"利用する"| windows_on_arm
windows_on_arm -->|"前提とする"| process_architecture_mixing_restriction
arm64ec -->|"軽減する"| process_architecture_mixing_restriction
arm64x -->|"軽減する"| process_architecture_mixing_restriction
com_inprocess_server -->|"前提とする"| process_architecture_mixing_restriction
com_localserver -->|"軽減する"| process_architecture_mixing_restriction
windows_on_arm -.->|"利用する"| rid_win_arm64
rid_win_arm64 -->|"前提とする"| dotnet
dotnet_framework -.->|"利用する"| x86_x64_emulation
anycpu_arm64_pinvoke_mismatch -->|"原因になり得る"| badimageformatexception
rid_win_arm64 -.->|"原因になり得る"| anycpu_arm64_pinvoke_mismatch
anycpu_arm64_pinvoke_mismatch -->|"で確認できる"| runtimeinformation_api
app_assure -->|"推奨される対応"| windows_on_arm
app_assure -->|"前提とする"| fasttrack
概念間の関係(全20件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Windows on Armはx86/x64エミュレーションを利用します。
- x86/x64エミュレーションはPrism(エミュレーター)を利用します。
- x86/x64エミュレーションはユーザーモードを前提とします。
- x86/x64エミュレーションはカーネルモードと両立しません。
- x86/x64エミュレーションはシェル拡張・IME等(他プロセスにロードされるDLL)と両立しません。
- x86/x64エミュレーションはWOW64を利用します。
- Copilot+ PCはWindows on Armを利用します。
- Windows on Armはプロセス内アーキテクチャ混在の制約を前提とします。
- Arm64ECはプロセス内アーキテクチャ混在の制約を軽減します。
- Arm64Xはプロセス内アーキテクチャ混在の制約を軽減します。
- COMインプロセスサーバーはプロセス内アーキテクチャ混在の制約を前提とします。
- COM LocalServer(別プロセスCOMサーバー)はプロセス内アーキテクチャ混在の制約を軽減します。
- Windows on ArmはRID win-arm64を利用します。
- RID win-arm64は.NET(Core以降)を前提とします。
- .NET Frameworkはx86/x64エミュレーションを利用します。
- AnyCPUとP/Invokeの組み合わせ問題はBadImageFormatExceptionの原因になることがあります。
- RID win-arm64はAnyCPUとP/Invokeの組み合わせ問題の原因になることがあります。
- AnyCPUとP/Invokeの組み合わせ問題はRuntimeInformation.ProcessArchitecture/OSArchitectureで確認できます。
- App AssureはWindows on Armに対する本記事の推奨です。
- App AssureはFastTrackを前提とします。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。