知識マップ: レジストリの32bit/64bitリダイレクトと仮想化の落とし穴 ── Wow6432Nodeと「書いたはずの値がない」問題
記事「レジストリの32bit/64bitリダイレクトと仮想化の落とし穴 ── Wow6432Nodeと「書いたはずの値がない」問題」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
64bit Windowsの32bitプロセスがHKLM\Softwareへアクセスすると、WOW64のレジストリリダイレクターが物理位置Wow6432Nodeへ透過的に誘導し、この振り分けはビットネスの話として読み書きの両方に効く。別ビューへは.NETのRegistryViewやWin32のKEY_WOW64_64KEY/32KEY、reg.exeの/reg:64・/reg:32という公式手段で明示的にアクセスすべきで、パスの直書きは将来変更され得るため避ける必要がある。管理者権限のない32bit対話型プロセスがHKLM\Softwareへ書き込むと、権限の話であるUACレジストリ仮想化によりVirtualStoreへ黙って転送され、requestedExecutionLevelを指定したプロセスはこの仮想化の対象外になる。COMのCLSID登録もビューごとに分離されるため、bitnessの不一致は0x80040154エラーの定番原因になり、実際にどこを読み書きしたかはProcmonの物理パスで確定させるのが最短である。
flowchart LR
accTitle: レジストリのリダイレクトと仮想化の知識マップ
accDescr: WOW64レジストリリダイレクターがbitnessに応じてWow6432Nodeへ読み書きを振り分けること、UACレジストリ仮想化が権限不足の書き込みをVirtualStoreへ転送すること、両者の違いとビューを明示するAPI、COM登録やインストーラーで起きる実害とProcmonによる確認手段を示す図
registry_redirector["レジストリリダイレクター"]
uac_registry_virtualization["UACレジストリ仮想化"]
wow64_subsystem["WOW64(Windows 32-bit on Windows 64-bit)"]
wow6432node["WOW6432Node"]
registryview_dotnet[".NET RegistryView列挙体"]
key_wow64_flags["KEY_WOW64_64KEY/KEY_WOW64_32KEY"]
reg_exe_view_option["reg.exeの/reg:64 /reg:32"]
virtualstore["VirtualStore"]
requested_execution_level["requestedExecutionLevel(実行レベル宣言)"]
installer_app_bitness_mismatch["インストーラーとアプリのbitness不一致"]
class_not_registered_error["0x80040154(Class not registered)"]
clsid["CLSID(Class ID)"]
regsvr32["regsvr32"]
hardcoded_registry_path["Wow6432Nodeパスの直書き"]
procmon["Process Monitor(procmon.exe)"]
wow64_subsystem -->|"利用する"| registry_redirector
registry_redirector -->|"利用する"| wow6432node
registry_redirector -->|"で構成できる"| registryview_dotnet
registry_redirector -->|"で構成できる"| key_wow64_flags
registry_redirector -->|"で構成できる"| reg_exe_view_option
uac_registry_virtualization -->|"利用する"| virtualstore
requested_execution_level -->|"防止する"| uac_registry_virtualization
virtualstore -.->|"内容を継承する"| wow6432node
registry_redirector -.->|"原因になり得る"| installer_app_bitness_mismatch
registry_redirector -.->|"原因になり得る"| class_not_registered_error
clsid -.->|"に保存される"| wow6432node
regsvr32 -->|"利用する"| registry_redirector
registryview_dotnet -->|"防止する"| hardcoded_registry_path
key_wow64_flags -->|"防止する"| hardcoded_registry_path
registryview_dotnet -.->|"軽減する"| installer_app_bitness_mismatch
registry_redirector -->|"で確認できる"| procmon
uac_registry_virtualization -->|"で確認できる"| procmon
installer_app_bitness_mismatch -->|"で確認できる"| reg_exe_view_option
class_not_registered_error -->|"で確認できる"| procmon
概念間の関係(全19件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- WOW64(Windows 32-bit on Windows 64-bit)はレジストリリダイレクターを利用します。
- レジストリリダイレクターはWOW6432Nodeを利用します。
- レジストリリダイレクターは.NET RegistryView列挙体で構成できます。
- レジストリリダイレクターはKEY_WOW64_64KEY/KEY_WOW64_32KEYで構成できます。
- レジストリリダイレクターはreg.exeの/reg:64 /reg:32で構成できます。
- UACレジストリ仮想化はVirtualStoreを利用します。
- requestedExecutionLevel(実行レベル宣言)はUACレジストリ仮想化を防ぎます。
- VirtualStoreはWOW6432Nodeの内容を継承して表示します。
- レジストリリダイレクターはインストーラーとアプリのbitness不一致の原因になることがあります。
- レジストリリダイレクターは0x80040154(Class not registered)の原因になることがあります。
- CLSID(Class ID)はWOW6432Nodeに保存されます。
- regsvr32はレジストリリダイレクターを利用します。
- .NET RegistryView列挙体はWow6432Nodeパスの直書きを防ぎます。
- KEY_WOW64_64KEY/KEY_WOW64_32KEYはWow6432Nodeパスの直書きを防ぎます。
- .NET RegistryView列挙体はインストーラーとアプリのbitness不一致を軽減します。
- レジストリリダイレクターはProcess Monitor(procmon.exe)で確認できます。
- UACレジストリ仮想化はProcess Monitor(procmon.exe)で確認できます。
- インストーラーとアプリのbitness不一致はreg.exeの/reg:64 /reg:32で確認できます。
- 0x80040154(Class not registered)はProcess Monitor(procmon.exe)で確認できます。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。