レジストリ リダイレクタでは、WOW64 環境でレジストリの特定の部分に対する個別の論理ビューを提供することで、32 ビット アプリケーションと 64 ビット アプリケーションが分離されます。それぞれの論理的なレジストリ ビューに対する 32 ビットと 64 ビットのレジストリ呼び出しがレジストリ リダイレクタによってインターセプトされ、対応する物理的なレジストリの場所にマップされます。リダイレクト処理は、アプリケーションで認識されません。そのため、レジストリのデータが 64 ビット版の Windows で異なる場所に格納されている場合でも、32 ビット版の Windows で実行している場合と同様に 32 ビット アプリケーションでは、レジストリのデータにアクセスできます。
リダイレクトされるレジストリ パスに含まれるキーのサブセットは共有されています。32 ビット レジストリでの共有キーの呼び出しはリダイレクトされません。その代わり、キーの物理的なコピーの 1 つが、レジストリのそれぞれの論理ビューにマップされます。リダイレクトされるキーと共有キーの一覧については、「WOW64 の影響を受けるレジストリ キー」を参照してください。
Windows Server 2008、Windows Vista、Windows Server 2003、および Windows XP について: COM や他のメカニズムを使用してアプリケーションの相互運用性を有効にするために、リダイレクトされるレジストリ キーのサブセットには "リフレクション (反映)" も行われます。レジストリ リフレクションの処理によって、レジストリ キーと値が 2 つのレジストリ ビュー間でコピーされ、レジストリ ビューの同期が保たれます。レジストリ リフレクションは、Windows 7 および Windows Server 2008 R2 で廃止されました。詳細については、「レジストリ リフレクション」を参照してください。
これらの論理ビューを使用するシナリオには、次のようなものがあります。
- 32 ビット アプリケーションで、HKEY_LOCAL_MACHINE\Software\Hello というレジストリ キーが存在するかどうか確認されます。キーが存在しない場合は、アプリケーションによってこのキーが作成され、Hello 32-bit world という既定値が設定されます。存在する場合は、その値が読み取られて表示されます。
- 同じアプリケーションが、"Hello 32-bit world" ではなく "Hello 64-bit world" と表示するように変更され、64 ビット アプリケーションとして再コンパイルされます。
- 32 ビット アプリケーションを 64 ビット版の Windows で実行すると、"Hello 32-bit world" と表示されます。64 ビット アプリケーションを実行すると、"Hello 64-bit world" と表示されます。どちらのアプリケーションでも、同じ定義済みのハンドルと同じキー名を使用して、同じレジストリ関数が呼び出されます。違いは、各アプリケーションがレジストリの対応する論理ビューで動作し、各ビューがレジストリの個別の物理的な場所にマップされることです。これにより、両方のバージョンの文字列が変更されずに維持されます。
リダイレクトされるキーは、Wow6432Node に含まれる物理的な場所にマップされます。たとえば、HKEY_LOCAL_MACHINE\Software は HKEY_LOCAL_MACHINE\Software\Wow6432Node にリダイレクトされます。ただし、リダイレクトされるキーの物理的な場所は、システムによって予約されていると見なす必要があります。この場所は変更される可能性があるため、アプリケーションでキーの物理的な場所に直接アクセスしないでください。詳細については、「別のレジストリ ビューへのアクセス」を参照してください。
%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 のすべてのパスが置換されます。
詳細については、次のトピックを参照してください。
- レジストリ リフレクション
- WOW64 の影響を受けるレジストリ キー
- 別のレジストリ ビューへのアクセス
- WOW64 におけるレジストリのリダイレクトの例
- 64 ビット版 Windows におけるレジストリへのリモート アクセス
このトピックに関するご意見をお寄せください (英語のみ)。
ビルド日付: 2009 年 5 月 30 日