@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/windows-registry-redirection-virtualization/#article>
    schema:about <https://comcomponent.com/knowledge/registry-redirector/>, <https://comcomponent.com/knowledge/uac-registry-virtualization/> ;
    schema:mentions <https://comcomponent.com/knowledge/wow64-subsystem/>, <https://comcomponent.com/knowledge/wow6432node/>, <https://comcomponent.com/knowledge/registryview-dotnet/>, <https://comcomponent.com/knowledge/key-wow64-flags/>, <https://comcomponent.com/knowledge/reg-exe-view-option/>, <https://comcomponent.com/knowledge/virtualstore/>, <https://comcomponent.com/knowledge/requested-execution-level/>, <https://comcomponent.com/knowledge/installer-app-bitness-mismatch/>, <https://comcomponent.com/knowledge/class-not-registered-error/>, <https://comcomponent.com/knowledge/hardcoded-registry-path/>, <https://comcomponent.com/knowledge/clsid/>, <https://comcomponent.com/knowledge/regsvr32/>, <https://comcomponent.com/knowledge/procmon/> .

<https://comcomponent.com/knowledge/registry-redirector/> a skos:Concept ;
    skos:prefLabel "レジストリリダイレクター"@ja ;
    skos:definition "32bitプロセスと64bitプロセスに別々の論理ビューを見せ、同じキー名へのアクセスを異なる物理位置へ透過的に振り分けるWOW64の仕組み。"@ja ;
    skos:altLabel "Registry Redirector" ;
    ks:uses <https://comcomponent.com/knowledge/wow6432node/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/registryview-dotnet/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/key-wow64-flags/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/reg-exe-view-option/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/procmon/> .

<https://comcomponent.com/knowledge/uac-registry-virtualization/> a skos:Concept ;
    skos:prefLabel "UACレジストリ仮想化"@ja ;
    skos:definition "書き込み権限のない32bit対話型プロセスによるHKLM\\Software配下への書き込みを、ユーザーごとの仮想ストアへ黙って転送するVista以降の互換技術。"@ja ;
    skos:altLabel "Registry Virtualization" ;
    ks:uses <https://comcomponent.com/knowledge/virtualstore/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/procmon/> .

<https://comcomponent.com/knowledge/wow64-subsystem/> a skos:Concept ;
    skos:prefLabel "WOW64(Windows 32-bit on Windows 64-bit)"@ja ;
    skos:definition "64bit Windowsが32bitアプリを実行するためのサブシステムで、レジストリやファイルシステムへのアクセスを透過的にリダイレクトする。"@ja ;
    skos:altLabel "WOW64" ;
    ks:uses <https://comcomponent.com/knowledge/registry-redirector/> .

<https://comcomponent.com/knowledge/wow6432node/> a skos:Concept ;
    skos:prefLabel "WOW6432Node"@ja ;
    skos:definition "64bit Windows上で32bitアプリ向けのレジストリ内容が物理的に置かれる場所。"@ja .

<https://comcomponent.com/knowledge/registryview-dotnet/> a skos:Concept ;
    skos:prefLabel ".NET RegistryView列挙体"@ja ;
    skos:definition "RegistryKey.OpenBaseKeyに渡し、Registry64/Registry32/Defaultでアクセスするレジストリビューを明示する.NETの列挙体。"@ja ;
    skos:altLabel "RegistryView.Registry64" ;
    skos:altLabel "RegistryView.Registry32" ;
    ks:prevents <https://comcomponent.com/knowledge/hardcoded-registry-path/> .

<https://comcomponent.com/knowledge/key-wow64-flags/> a skos:Concept ;
    skos:prefLabel "KEY_WOW64_64KEY/KEY_WOW64_32KEY"@ja ;
    skos:definition "RegOpenKeyExなどのsamDesiredに指定し、Win32 APIから明示的に64bit/32bitビューへアクセスするためのアクセス権フラグ。"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/hardcoded-registry-path/> .

<https://comcomponent.com/knowledge/reg-exe-view-option/> a skos:Concept ;
    skos:prefLabel "reg.exeの/reg:64 /reg:32"@ja ;
    skos:definition "reg.exeコマンドでレジストリの64bitビュー・32bitビューを明示的に指定するオプション。"@ja .

<https://comcomponent.com/knowledge/virtualstore/> a skos:Concept ;
    skos:prefLabel "VirtualStore"@ja ;
    skos:definition "UACレジストリ仮想化によって転送された書き込みが格納される、ユーザーごとの仮想ストア(HKEY_USERS\\<SID>_Classes\\VirtualStore\\Machine\\Software)。"@ja ;
    skos:altLabel "HKCU\\Software\\Classes\\VirtualStore" .

<https://comcomponent.com/knowledge/requested-execution-level/> a skos:Concept ;
    skos:prefLabel "requestedExecutionLevel(実行レベル宣言)"@ja ;
    skos:definition "アプリケーションマニフェストで宣言する、asInvoker・highestAvailable・requireAdministratorのいずれかの起動時権限レベルである。"@ja ;
    skos:altLabel "asInvoker" ;
    skos:altLabel "highestAvailable" ;
    skos:altLabel "requireAdministrator" ;
    skos:altLabel "requestedExecutionLevel(マニフェスト)"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/uac-registry-virtualization/> .

<https://comcomponent.com/knowledge/installer-app-bitness-mismatch/> a skos:Concept ;
    skos:prefLabel "インストーラーとアプリのbitness不一致"@ja ;
    skos:definition "インストーラーとアプリ本体で書き込み・読み取りのレジストリビュー(bitness)が揃っていないために、書いたはずの設定値が読めない問題。"@ja ;
    ks:verifiedBy <https://comcomponent.com/knowledge/reg-exe-view-option/> .

<https://comcomponent.com/knowledge/class-not-registered-error/> a skos:Concept ;
    skos:prefLabel "0x80040154(Class not registered)"@ja ;
    skos:definition "公式にはREGDB_E_CLASSNOTREGと呼ばれるCOMのエラーで、完全な未登録だけでなく、別ビット数側のレジストリviewにだけ登録されている場合や、そのユーザーにしか見えないHKCU側にだけ登録されている場合にも起きる。"@ja ;
    skos:altLabel "REGDB_E_CLASSNOTREG" ;
    ks:verifiedBy <https://comcomponent.com/knowledge/procmon/> .

<https://comcomponent.com/knowledge/clsid/> a skos:Concept ;
    skos:prefLabel "CLSID(Class ID)"@ja ;
    skos:definition "COMコンポーネントの実装(クラス)を一意に指すGUID。レジストリ上の登録の鍵になる識別子。"@ja ;
    skos:altLabel "Class ID" ;
    skos:broader <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/regsvr32/> a skos:Concept ;
    skos:prefLabel "regsvr32"@ja ;
    skos:definition "DLLやOCXなどのCOMコンポーネントをレジストリへ登録・登録解除するコマンドラインツール。"@ja ;
    skos:altLabel "regsvr32.exe" ;
    ks:uses <https://comcomponent.com/knowledge/registry-redirector/> .

<https://comcomponent.com/knowledge/hardcoded-registry-path/> a skos:Concept ;
    skos:prefLabel "Wow6432Nodeパスの直書き"@ja ;
    skos:definition "Wow6432Nodeなど、リダイレクトされた物理位置のパスをコードに直接書き込んでアクセスすること。物理位置はシステム予約で将来変更され得るため避けるべきとされる。"@ja ;
    skos:altLabel "リダイレクト先の決め打ち"@ja .

<https://comcomponent.com/knowledge/procmon/> a skos:Concept ;
    skos:prefLabel "Process Monitor(procmon.exe)"@ja ;
    skos:definition "ファイルI/O・レジストリ・プロセス/スレッド活動をリアルタイムに監視できるSysinternalsのツール。Advanced Outputを有効にすると、IRPやファストI/Oのカーネル側の語彙で操作を表示する。"@ja ;
    skos:altLabel "Procmon" ;
    skos:altLabel "Process Monitor" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wow64-subsystem/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/registry-redirector/> ;
    schema:description "WOW64は32bitプロセスと64bitプロセスに別々のレジストリの論理ビューを見せるためレジストリリダイレクターを使う"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/winprog64/registry-redirector> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/registry-redirector/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/wow6432node/> ;
    schema:description "32bitプロセスのHKEY_LOCAL_MACHINE\\Software配下へのアクセスは、リダイレクターにより物理的にWow6432Node配下へ透過的に誘導される"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/winprog64/registry-redirector> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/registry-redirector/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/registryview-dotnet/> ;
    schema:description "リダイレクトされる論理パスに対して実際にどちらのビューへアクセスするかは、.NETのRegistryViewで明示的に構成できる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/microsoft.win32.registryview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/registry-redirector/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/key-wow64-flags/> ;
    schema:description "Win32 APIではKEY_WOW64_64KEY/KEY_WOW64_32KEYをsamDesiredに指定することで、リダイレクトされる論理パスに対してどちらのビューへアクセスするかを明示できる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/winprog64/accessing-an-alternate-registry-view> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/registry-redirector/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/reg-exe-view-option/> ;
    schema:description "reg.exeでは/reg:64・/reg:32オプションで、リダイレクトされる論理パスに対してどちらのビューへアクセスするかを明示できる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/reg-query> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/uac-registry-virtualization/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/virtualstore/> ;
    schema:description "UACレジストリ仮想化は、権限不足の書き込みをユーザーごとのVirtualStoreへ転送する"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/sysinfo/registry-virtualization> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/requested-execution-level/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/uac-registry-virtualization/> ;
    schema:description "マニフェストにrequestedExecutionLevelを指定すると、そのプロセスのファイル/レジストリ仮想化は無効になる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/sbscs/application-manifests> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/virtualstore/> ;
    rdf:predicate ks:inherits ;
    rdf:object <https://comcomponent.com/knowledge/wow6432node/> ;
    schema:description "32bitプロセスの読み取り時には、VirtualStoreの値と本来のグローバルな格納場所(32bitプロセスではWow6432Node配下)の値のマージビューが返され、同名の値はVirtualStore側が優先される"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/sysinfo/registry-virtualization> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/registry-redirector/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/installer-app-bitness-mismatch/> ;
    schema:description "インストーラーとアプリ本体で読み書きするレジストリビューが揃っていないと、リダイレクトにより書いたはずの値が読めなくなる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/winprog64/registry-redirector> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/registry-redirector/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/class-not-registered-error/> ;
    schema:description "32bit/64bitでCLSID登録のビューが分かれるため、呼び出し元と登録先のbitnessが食い違うと0x80040154(クラスが登録されていません)エラーになり得る"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/winprog64/shared-registry-keys> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/clsid/> ;
    rdf:predicate ks:storedIn ;
    rdf:object <https://comcomponent.com/knowledge/wow6432node/> ;
    schema:description "32bit COMサーバーのCLSID登録は、レジストリリダイレクトによりWow6432Node配下の物理位置に保存される"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/winprog64/shared-registry-keys> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/regsvr32/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/registry-redirector/> ;
    schema:description "regsvr32には32bit版と64bit版があり、どちらで登録したかによってレジストリリダイレクターがどちらのビューへ書き込むかが決まる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/winprog64/registry-redirector> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/registryview-dotnet/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/hardcoded-registry-path/> ;
    schema:description "RegistryViewで明示的にビューを指定すれば、システム予約であるWow6432Nodeパスをコードに直接書き込む必要がなくなる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/microsoft.win32.registryview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/key-wow64-flags/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/hardcoded-registry-path/> ;
    schema:description "KEY_WOW64_64KEY/KEY_WOW64_32KEYで明示的にビューを指定すれば、Wow6432Nodeパスの直書きを避けられる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/winprog64/accessing-an-alternate-registry-view> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/registryview-dotnet/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/installer-app-bitness-mismatch/> ;
    schema:description "64bit移行の過渡期にRegistryView.Registry32で旧ビューを読み取る実装にしておけば、インストーラーとアプリのbitness不一致による値の欠落を軽減できる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/microsoft.win32.registryview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/registry-redirector/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/procmon/> ;
    schema:description "32bitプロセスが実際にどの物理パスへリダイレクトされたかは、ProcmonのPathカラムで確認できる"@ja ;
    ks:evidence <https://learn.microsoft.com/sysinternals/downloads/procmon> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/uac-registry-virtualization/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/procmon/> ;
    schema:description "UACレジストリ仮想化が発動したかどうかは、Procmon上で書き込みがVirtualStore配下へ流れているかを見て観測できる"@ja ;
    ks:evidence <https://learn.microsoft.com/sysinternals/downloads/procmon> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/installer-app-bitness-mismatch/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/reg-exe-view-option/> ;
    schema:description "どちらのビューに値があるかは、reg queryの/reg:64と/reg:32で両ビューを読み比べることで確定できる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/reg-query> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/class-not-registered-error/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/procmon/> ;
    schema:description "0x80040154の原因となるCLSIDオープン失敗がどちらのビューで起きているかは、Procmonでの観測により追跡できる"@ja ;
    ks:evidence <https://learn.microsoft.com/sysinternals/downloads/procmon> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
