次の方法で共有


レジストリ リダイレクター

レジストリ リダイレクターは、WOW64 上のレジストリの特定の部分の個別の論理ビューを提供することで、32 ビットと 64 ビットのアプリケーションを分離します。 レジストリ リダイレクターは、32 ビットと 64 ビットのレジストリ呼び出しをそれぞれの論理レジストリ ビューにインターセプトし、対応する物理レジストリの場所にマップします。 リダイレクト プロセスは、アプリケーションに対して透過的です。 そのため、32 ビット アプリケーションは、データが 64 ビット Windows 上の別の場所に格納されている場合でも、32 ビット Windows で実行されているかのようにレジストリ データにアクセスできます。

ARM 上のWindows 10: x86 アプリケーションの 32 ビット論理ビューに加えて、ARM 上のWindows 10には、32 ビット ARM アプリケーション用の個別の論理ビューが含まれています。

リダイレクトされたレジストリ パスの下にあるキーのサブセットが共有されます。 共有キーへの 32 ビット レジストリ呼び出しはリダイレクトされません。 代わりに、キーの 1 つの物理コピーがレジストリの各論理ビューにマップされます。 リダイレクトされたキーと共有キーの一覧については、「 WOW64 の影響を受けるレジストリ キー」を参照してください。

Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: COM やその他のメカニズムを使用してアプリケーションの相互運用性を有効にするために、リダイレクトされたレジストリ キーのサブセットも 反映されます。 レジストリ リフレクションのプロセスでは、2 つのレジストリ ビュー間でレジストリ キーと値がコピーされ、同期が維持されます。 レジストリ リフレクションは、Windows 7 および Windows Server 2008 R2 以降で削除されました。 詳細については、「 レジストリ リフレクション」を参照してください。

次のシナリオは、これらの論理ビューの使用を示しています。

  • 32 ビット x86 アプリケーションは、次のレジストリ キーが存在するかどうかを確認します: HKEY_LOCAL_MACHINE\Software\Hello。 キーが存在しない場合、アプリケーションは既定値の "Hello 32 ビット x86 world" でキーを作成します。それ以外の場合は、値を読み取って表示します。
  • 同じアプリケーションは、"Hello 32 ビット x86 world" ではなく "Hello 64 ビットワールド" を記述するように変更され、64 ビット x64 または ARM64 アプリケーションとして再コンパイルされます。
  • ARM でのWindows 10: 同じアプリケーションが "Hello 32 ビット ARM world" を記述するように変更され、32 ビット ARM アプリケーションとして再コンパイルされます。
  • 32 ビット x86 アプリケーションが 64 ビット Windows で実行されると、"Hello 32 ビット x86 world" と表示されます。 64 ビット アプリケーションを実行すると、"Hello 64 ビット ワールド" と表示されます。 ARM でのWindows 10: 32 ビット ARM アプリケーションが 64 ビット ARM64 Windows で実行されると、"Hello 32 ビット ARM world" と表示されます。 すべてのアプリケーションは、同じ定義済みハンドルと同じキー名を持つ同じレジストリ関数を呼び出します。違いは、各アプリケーションがレジストリの論理ビューで動作し、各ビューがレジストリの個別の物理的な場所にマップされ、すべてのバージョンの文字列をそのまま保持するという点です。

リダイレクトされたキーは、 Wow6432Node の下の物理的な場所にマップされます。 たとえば、 HKEY_LOCAL_MACHINE\SoftwareHKEY_LOCAL_MACHINE\Software\Wow6432Nodeにリダイレクトされます。 ただし、リダイレクトされたキーの物理的な場所は、システムによって予約されていると見なす必要があります。 この場所は変更される可能性があるため、アプリケーションはキーの物理的な場所に直接アクセスしないでください。 詳細については、「 代替レジストリ ビューへのアクセス」を参照してください。

ARM でのWindows 10: リダイレクトされた 32 ビット ARM キーは、WowAA32Node の下の物理的な場所にマップされます。

%ProgramFiles% または %commonprogramfiles% を含む REG_SZ または REG_EXPAND_SZ データをレジストリに書き込む 32 ビット アプリケーションを支援するために、WOW64 はこれらの書き込み操作をインターセプトし、"%ProgramFiles(x86)%" と "%commonprogramfiles(x86)%" に置き換えます。 たとえば、Program Files ディレクトリが C ドライブ上にある場合、"%ProgramFiles(x86)%" は "C:\Program Files (x86)" に展開されます。 置換は、次の条件が満たされた場合にのみ発生します。

  • 文字列は%ProgramFiles% または %commonprogramfiles% で始まる必要があります。 文字列がスペースまたは %以外の文字で始まる場合、文字列は置き換えされません。
  • 文字列比較では大文字と小文字が区別されるため、%ProgramFiles% または %commonprogramfiles% の大文字と小文字は正確に示されている必要があります。 たとえば、文字列が %commonprogramfiles% ではなく %CommonProgramFiles% で始まる場合、文字列は置き換えされません。
  • 文字列はMAX_PATH*2+15 文字を超えることはできません。 この長さを超える場合は、置き換えされません。
  • キーをKEY_WOW64_64KEYで開くことができません。 このフラグは、キーに対する操作を 64 ビット レジストリ ビューで実行する必要があるため、置き換えないことを指定します。 詳細については、「 代替レジストリ ビューへのアクセス」を参照してください。

Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: KEY_WOW_64_64KEY フラグは、キーが置き換えられるかどうかには影響しません。 このフラグは、Windows 7 および Windows Server 2008 R2 以降の置換に影響します。

さらに、system32 を含むREG_SZキーまたはREG_EXPAND_SZ キーは syswow64 に置き換えられます。 文字列は、%windir%\system32 を指すパスで始まる必要があります。 文字列の比較では、大文字と小文字は区別されません。 パスと一致する前に環境変数が展開されるため、%windir%\system32、%SystemRoot%\system32、C:\windows\system32 のパスがすべて置き換えられます。 このパッチは、Windows 7 より前に反映されたキーにのみ適用されます。

詳細については、次のトピックを参照してください。