Windows レジストリ リフレクションの削除
プラットフォーム
クライアント - Windows 7
サーバー - Windows Server 2008 R2
機能への影響
重大度 - 低
頻度 - 低
説明
レジストリ リフレクションは、2 つのレジストリ ビュー間でレジストリ キーと値をコピーして、同期を維持するプロセスです。以前の Windows の 64 ビット インストールでは、プロセスによって、32 ビット ビューと 64 ビット ビュー間でリダイレクトされたレジストリ キーのサブセットが反映されていました。 ただし、この機能の実装により、レジストリの状態にいくつかの不整合が生じていました。 レジストリ リフレクションの詳細については、「Registry リフレクション」を参照してください。
Windows 7 以降では、レジストリ リフレクションが完全に削除され、以前は反映されていたキーがマージされています。
- HKEY_LOCAL_MACHINE\Software\Classes
- HKEY_LOCAL_MACHINE\Software\Microsoft\COM3
- HKEY_LOCAL_MACHINE\Software\Microsoft\EventSystem
- HKEY_LOCAL_MACHINE\Software\Microsoft\Ole
- HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc
- HKEY_USERS\*\Software\Classes
- HKEY_USERS\*_Classes
これらのキーへの変更は 32 ビット アプリケーションと 64 ビット アプリケーションの両方ですぐに利用できるため、実質的には同じ反映動作が提供されます。
条件付きで反映されたキーは分割されたままになります。
- HKEY_LOCAL_MACHINE\Software\Classes\CLSID
- HKEY_LOCAL_MACHINE\Software\Classes\Interface
- HKEY_USERS\*\Software\Classes\CLSID
- HKEY_USERS\*\Software\Classes\Interface
- HKEY_USERS\*_Classes\CLSID
- HKEY_USERS\*_Classes\Interface
これらは、32 ビット アプリケーションと 64 ビット アプリケーション間で共有すべきでないデータを保持するために使用されます。
マニフェスト
上記の一覧の CLSID およびインターフェース キーは、反映されなくなりますが、リダイレクトは行われます。 ほとんどの場合、これは望ましい動作ですが、Vista では、反映された動作にアプリケーションが依存する可能性があります。
反映の動作をアプリケーションで制御できるようにする関数 (RegDisableReflectionKey および RegEnableReflectionKey) は、Windows 7 では無効です。
影響の軽減
レジストリ リフレクションの主なコンシューマーは COM です。 COM およびその他のコンシューマーは、この変更に対応するために更新されました。 この変更は、標準 COM API を使用するアプリケーションには影響しません。
解決策
レジストリ リフレクションを使用して 32 ビット ビューと 64 ビット ビューを同期する場合は、次のいずれかのオプションを適用します。
インストール時に両方のビューでキーを明示的に作成する
反映されたキーのスコープからキーを移動する
反映されたキーを照会するときにレジストリの両方のビューを確認する
メモ: KEY_WOW64_32KEY フラグと KEY_WOW64_64KEY フラグを組み合わせることはできません
レジストリ リフレクションの無効化に RegDisableReflectionKey 関数を使用している場合は、次のいずれかのオプションを適用します。
- インストール時に両方のビューでキーを明示的に作成する
- 反映されたキーのスコープからキーを移動する
- プラットフォーム固有のサブキー (x86、amd64、ia64 など) を使用してビット固有のデータを分離する
その他のリソースへのリンク
Note
一部の言語や国/地域では、これらのリソースを利用できない場合があります。