知識マップ: Windowsアプリ互換の仕組み ── 互換モード・シム・Compatibility Administratorで古いアプリを延命する
記事「Windowsアプリ互換の仕組み ── 互換モード・シム・Compatibility Administratorで古いアプリを延命する」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
互換モードの正体はシム(互換レイヤー)で、互換性タブの設定はAppCompatFlags\Layersキーに書き込まれ、起動時にそのプロセスへシムの束が適用されます。シムの仕組みはインポートアドレステーブルの書き換えによるユーザーモードのAPIフックで、アプリ側のコードとして動くためOSのセキュリティ機構を回避することはできず、シムで直せることはアプリのコード修正でも直せる範囲に収まります。どのEXEにどのシムを当てるかは.sdbのマッチング属性で決まり、この照合は互換モードを設定したアプリだけでなくすべてのプロセス起動で行われています。PCAが問題の兆候を検出して自動で互換設定を当てることもあるため、「設定していないのに互換モードのチェックが入っていた」は設計どおりの動作です。カーネルモードの問題、16bitアプリ、ハードウェアの直接アクセスには効きません。
flowchart LR
accTitle: Windowsのアプリケーション互換シムと互換モードの知識マップ
accDescr: 互換モードの正体がシムであること、IAT差し替えによるAPIフックという仕組み、.sdbによるマッチングとPCAによる自動適用、Layersキーへの保存、RunAsInvokerによる昇格抑止、カーネルモードや16bitアプリには効かないという限界を示す図
appcompat_shim["互換修正(シム)"]
compatibility_layer["互換レイヤー(互換モード)"]
import_address_table["インポートアドレステーブル(IAT)"]
admin_access_spoofing["管理者権限チェックの偽装"]
appcompatflags_layers["AppCompatFlags\Layersキー"]
shim_database["シムデータベース(.sdb)"]
compatibility_administrator["Compatibility Administrator"]
sdbinst["カスタム互換データベースの配布"]
program_compatibility_assistant["PCA(Program Compatibility Assistant)"]
os_version_spoofing["OSバージョンの詐称"]
supportedos_manifest["マニフェストのsupportedOS宣言"]
runasinvoker["RunAsInvoker"]
uac_elevation["UAC昇格(管理者として実行)"]
registry_virtualization["レジストリ仮想化(VirtualStore)"]
admin_rights["管理者権限"]
win16_application["16bitアプリケーション"]
wow64["WOW64"]
dpi_virtualization["DPI仮想化"]
windows_sandbox["Windows サンドボックス"]
appcompat_shim -->|"利用する"| import_address_table
appcompat_shim -->|"実装を担う"| admin_access_spoofing
compatibility_layer -->|"利用する"| appcompat_shim
compatibility_layer -->|"に保存される"| appcompatflags_layers
appcompat_shim -->|"で構成できる"| shim_database
shim_database -->|"前提とする"| compatibility_administrator
sdbinst -->|"前提とする"| shim_database
program_compatibility_assistant -->|"自動化する"| compatibility_layer
appcompat_shim -->|"実装を担う"| os_version_spoofing
supportedos_manifest -->|"防止する"| os_version_spoofing
runasinvoker -->|"実装を担う"| appcompat_shim
runasinvoker -->|"防止する"| uac_elevation
registry_virtualization -->|"軽減する"| admin_rights
win16_application -->|"両立しない"| wow64
dpi_virtualization -->|"で構成できる"| compatibility_layer
sdbinst -.->|"で確認できる"| windows_sandbox
概念間の関係(全16件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- 互換修正(シム)はインポートアドレステーブル(IAT)を利用します。
- 互換修正(シム)は管理者権限チェックの偽装の実装を担います。
- 互換レイヤー(互換モード)は互換修正(シム)を利用します。
- 互換レイヤー(互換モード)はAppCompatFlags\Layersキーに保存されます。
- 互換修正(シム)はシムデータベース(.sdb)で構成できます。
- シムデータベース(.sdb)はCompatibility Administratorを前提とします。
- カスタム互換データベースの配布はシムデータベース(.sdb)を前提とします。
- PCA(Program Compatibility Assistant)は互換レイヤー(互換モード)を自動化します。
- 互換修正(シム)はOSバージョンの詐称の実装を担います。
- マニフェストのsupportedOS宣言はOSバージョンの詐称を防ぎます。
- RunAsInvokerは互換修正(シム)の実装を担います。
- RunAsInvokerはUAC昇格(管理者として実行)を防ぎます。
- レジストリ仮想化(VirtualStore)は管理者権限を軽減します。
- 16bitアプリケーションはWOW64と両立しません。
- DPI仮想化は互換レイヤー(互換モード)で構成できます。
- カスタム互換データベースの配布はWindows サンドボックスで確認できます。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。