Windows10

32bitソフトの64bit環境での動作

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

レジストリリダイレクタは、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-bit x86 world」のデフォルト値でキーを作成します。それ以外の場合は、値を読み取って表示します。
● 同じアプリケーションが「Hello 32ビットx86ワールド」ではなく「Hello 64ビットワールド」を記述するように変更され、64ビットx64またはARM64アプリケーションとして再コンパイルされます。
ARM上のWindows 10:同じアプリケーションが「Hello 32ビットARMワールド」を記述するように変更され、32ビットARMアプリケーションとして再コンパイルされます。
●32ビットx86アプリケーションを64ビットWindowsで実行すると、「Hello 32-bit x86 world」と表示されます。 64ビットアプリケーションを実行すると、「Hello 64-bit world」と表示されます。 ARM上のWindows 10:32ビットARMアプリケーションを64ビットARM64 Windowsで実行すると、「Hello 32ビットARMワールド」と表示されます。すべてのアプリケーションは、事前定義された同じハンドルと同じキー名で同じレジストリ関数を呼び出します。違いは、各アプリケーションがレジストリの論理ビューで動作し、各ビューがレジストリの個別の物理的な場所にマップされることです。これにより、文字列のすべてのバージョンがそのまま保持されます。

リダイレクトされたキーは、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より前に反映されたキーにのみ適用されます。

参考記事:Registry Redirector

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

レジストリの反映
WOW64の影響を受けるレジストリキー
代替レジストリビューへのアクセス
WOW64でのレジストリリダイレクトの例
64ビットWindowsでのリモートレジストリアクセス

人気の記事をご紹介

カテゴリーで絞る

  • この記事を書いた人

山本

はじめまして。「山本まこと」と申します。 フリーランスでシステムエンジニアを現役でさせて頂いています。 業務内容はシステム設計、プログラム作成等何でさせて頂いています。 特にサーバ構築、業務端末(パソコン)の構築の仕事を多くさせて頂いています。 サーバ構築はOSが24時間止まらず高パフォーマンスで動作する用に設定したり セキュリティ対策(脆弱性)を実施することやデータベースの構築も実施します。 業務端末(パソコン)の構築は業務アプリケーションが快適に動作するようOSの設定を実施します。 パソコンは日進月歩で性能はどんどん向上しています。 またマイクロソフトのOSもWinows7からWindows10へ移行する段階を迎えています。 Windows10においては、使い勝手はとても良くなっていますが、自動化が進み、一度不調になってしまうと設定変更での修復するにはコツが必要です。 また、マシンスペックについてもある程度のものが要求されます。 このホームページでは、皆さんがパソコンを快適に使っていただけるようにお役に立てたらと思い、記事を書かせて頂いています。

-32bitソフトの64bit環境での動作
-, , , ,

© 2021 幸せになれるPCライフ