次の方法で共有


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

一部の言語や国/地域では、これらのリソースを利用できない場合があります。