この記事では、64 ビット バージョンの Windows で実行されている 32 ビット プログラムの互換性に関する考慮事項と制限事項について説明します。
元の KB 番号: 896456
まとめ
64 ビット バージョンの Windows では、Microsoft Windows-32-on-Windows-64 (WOW64) サブシステムを使用して、変更なしで 32 ビット プログラムを実行します。 64 ビット バージョンの Windows では、16 ビット バイナリまたは 32 ビット ドライバーはサポートされていません。 16 ビット バイナリまたは 32 ビット ドライバーに依存するプログラムは、プログラムの製造元がプログラムの更新プログラムを提供しない限り、64 ビット バージョンの Windows では実行できません。
プログラムの互換性やパフォーマンスに影響する考慮事項がある場合があります。 64 ビット バージョンの Windows でプログラムをテストすることで、プログラムに互換性またはパフォーマンスの問題があるかどうかを判断できます。
この記事では、64 ビット バージョンの Windows で 32 ビット プログラムを実行するための互換性に関する考慮事項について説明します。 この記事では、32 ビットバージョンと 64 ビット バージョンの Windows、または異なる 64 ビット オペレーティング システムを比較しません。 この記事では、32 ビット バイナリと 64 ビット バイナリの違いを理解していることを前提としています。
はじめに
x64 ベースのバージョンの Microsoft Windows は、ネイティブの 64 ビット プログラムを実行するように最適化されています。 さらに、x64 ベースのバージョンの Windows では、WOW64 サブシステムを使用して 32 ビット プログラムを実行します。
32 ビット プログラムの実行
WOW64 サブシステムを使用すると、x64 ベースのバージョンの Windows で 32 ビット プログラムを変更せずに実行できます。 WOW64 サブシステムは、x64 ベースのバージョンの Windows に 32 ビット環境を作成することでこれを行います。 WOW64 サブシステムの詳細については、Microsoft Platform SDK ドキュメントの 64 ビット Windows セクションの「32 ビット アプリケーションの実行」トピックを参照してください。 このドキュメントを表示するには、次の Microsoft Web サイトにアクセスします。 Running 32 ビット アプリケーション。
プログラムのパフォーマンスに関する考慮事項
WOW64 サブシステムは、x64 ベースのバージョンの Windows に 32 ビット環境を作成します。 これらのオペレーティング システムでは、一部の 32 ビット プログラムの実行速度が、32 ビット バージョンの Windows よりも遅くなる場合があります。 また、多くのメモリを必要とする一部の 32 ビット プログラムでは、x64 ベースのバージョンの Windows でパフォーマンスが向上する可能性があります。 このパフォーマンスの向上は、x64 ベースのバージョンの Windows が 32 ビット バージョンの Windows よりも多くの物理メモリをサポートしているために発生します。
64 ビットバージョンと 32 ビット バージョンの Windows のメモリ管理の違いの詳細については、Microsoft Platform SDK ドキュメントの「メモリ管理について」セクションの「仮想アドレス空間」トピックを参照してください。 このドキュメントを表示するには、次の Microsoft Web サイトを参照してください: 仮想アドレス空間
WOW64 サブシステムの制限事項
WOW64 サブシステムは、次のプログラムをサポートしていません。
- 16 ビット オペレーティング システム用にコンパイルされたプログラム
- 32 ビット オペレーティング システム用にコンパイルされるカーネル モード プログラム
16 ビット プログラム
x64 ベースのバージョンの Windows では、16 ビット プログラムまたは 16 ビット プログラム コンポーネントはサポートされていません。 x64 ベースのバージョンの Windows で 16 ビット プログラムを実行するために必要なソフトウェア エミュレーションにより、これらのプログラムのパフォーマンスが大幅に低下します。
16 ビット インストーラーは、32 ビット プログラムのインストールと構成に頻繁に使用されます。 さらに、一部の 32 ビット プログラムでは、16 ビット コンポーネントを正しく実行する必要があります。 16 ビット コンポーネントを必要とする 32 ビット プログラムは、インストール後に正しく実行される場合がありますが、16 ビット インストーラーを使用して 32 ビット プログラムをインストールすることはできません。 16 ビット コンポーネントを必要とするプログラムは、x64 ベースのバージョンの Windows では実行できません。
16 ビット コンポーネントを必要とする 32 ビット プログラムで 16 ビット のファイルまたはコンポーネントを実行しようとすると、32 ビット プログラムによってエラー メッセージがシステム ログに記録されます。 その後、オペレーティング システムによって、32 ビット プログラムでエラーが処理されます。
プログラムに 16 ビット コンポーネントが必要かどうかを判断するには、プログラムをインストールして実行します。 プログラムでエラー メッセージが生成された場合は、x64 ベースのバージョンの Windows と互換性のある更新プログラムについて、プログラムの製造元に問い合わせてください。
32 ビット ドライバー
x64 ベースのバージョンの Windows では、32 ビット ドライバーはサポートされていません。 すべてのハードウェア デバイス ドライバーとプログラム ドライバーは、x64 ベースのバージョンの Windows 専用にコンパイルする必要があります。
32 ビット プログラムが x64 ベースのバージョンの Windows を実行しているコンピューターに 32 ビット ドライバーをインストールしようとすると、ドライバーのインストールが失敗します。 この動作が発生すると、x64 ベースのバージョンの Windows から 32 ビット プログラムにエラーが報告されます。
32 ビット プログラムが、x64 ベースのバージョンの Windows を実行しているコンピューターで自動起動用の 32 ビット ドライバーを登録しようとすると、コンピューター上のブートストラップ ローダーは、32 ビット ドライバーがサポートされていないことを認識します。 x64 ベースのバージョンの Windows では、32 ビット ドライバーは起動されませんが、他の登録済みドライバーは起動します。
プログラムに 32 ビット ドライバーが必要かどうかを判断するには、プログラムをインストールして実行します。 プログラムでエラー メッセージが生成された場合は、x64 ベースのバージョンの Windows と互換性のある更新プログラムについて、プログラムの製造元に問い合わせてください。
その他の考慮事項
レジストリとファイルのリダイレクト
WOW64 サブシステムは、レジストリ呼び出しと一部のファイル システム呼び出しをリダイレクトすることで、32 ビット バイナリを 64 ビット バイナリから分離します。 WOW64 サブシステムは、バイナリを分離して、32 ビット バイナリが誤って 64 ビット バイナリからデータにアクセスするのを防ぎます。 たとえば、%systemroot%\System32 フォルダーから.dll ファイルを実行する 32 ビット バイナリは、誤って 32 ビット バイナリと互換性のない 64 ビット .dll ファイルにアクセスしようとする可能性があります。 これを防ぐために、WOW64 サブシステムは %systemroot%\System32 フォルダーから %systemroot%\SysWOW64 フォルダーにアクセスをリダイレクトします。 このリダイレクトでは、.dll ファイルが 32 ビット プログラムで動作するように特別に設計されている必要があるため、互換性エラーが回避されます。
ファイル システムとレジストリのリダイレクトの詳細については、Microsoft Platform SDK ドキュメントの 64 ビット Windows セクションの「32 ビット アプリケーションの実行」トピックを参照してください。 このドキュメントを表示するには、次の Microsoft Web サイトにアクセスします。 Running 32 ビット アプリケーション
WOW64 サブシステムは、32 ビット バイナリに変更を加えることなく、32 ビット バイナリ呼び出しをリダイレクトします。 ただし、一部のタスクを実行すると、このリダイレクトの証拠が表示される場合があります。 たとえば、64 ビットのコマンド プロンプトでコマンド ライン スクリプトを入力した場合、コマンド プロンプトは Program Files フォルダー内の 32 ビット プログラムにアクセスできないことがあります。 WOW64 サブシステムは、プログラム ファイル (x86) フォルダーに 32 ビット プログラムをリダイレクトしてインストールします。 正しいフォルダーにアクセスするには、コマンド ライン スクリプトを変更する必要があります。 または、32 ビットのコマンド プロンプトでコマンド ライン スクリプトを入力する必要があります。 32 ビットのコマンド プロンプトは、ファイル システムの呼び出しを正しい 32 ビット ディレクトリに自動的にリダイレクトします。
32 ビットのコマンド プロンプトを開始するには、次の手順に従います。
- Startをクリックし、Runをクリックし、「%windir%\SysWoW64\cmd.exe」と入力して、[OK] をクリック。
バージョン チェック
一部の 32 ビット プログラムは、オペレーティング システムのバージョン情報を調べます。 このチェックを実行する多くの 32 ビット プログラムでは、x64 ベースのバージョンの Windows が互換性のあるオペレーティング システムとして認識されません。 この動作が発生すると、32 ビット プログラムによってバージョン チェック エラーが生成され、閉じられます。 この動作が発生した場合は、x64 ベースのバージョンの Windows と互換性のある更新プログラムについて、32 ビット プログラムの製造元に問い合わせてください。
The Microsoft .NET Framework
次の条件に該当する場合、Microsoft .NET Framework でコンパイルされたプログラムは WOW64 サブシステムで 32 ビット プログラムとして実行されます。
- このプログラムでは、ヘッダー情報に ILONLY ビットが設定されています。
- プログラムは Microsoft .NET Framework 1.1 でコンパイルされました。 プログラムにヘッダー情報に ILONLY ビットが設定されていない場合、またはプログラムが Microsoft .NET Framework バージョン 2.0 でコンパイルされた場合、プログラムはネイティブの 64 ビット プログラムとして実行されます。
OpenGL
x64 ベースのバージョンの Windows には、OpenGL グラフィックス ドライバーは含まれていません。 x64 ベースのバージョンの Windows と互換性のあるドライバーについては、デバイスの製造元にお問い合わせください。
Microsoft 管理コンソール (MMC)
x64 ベースのバージョンの Windows では、64 ビット バージョンの Microsoft 管理コンソール (MMC) を使用して、さまざまなスナップインを実行します。ただし、WOW64 サブシステムでスナップインを実行するために、32 ビット バージョンの MMC が必要になる場合があります。 x64 ベースのバージョンの Windows での MMC の動作の詳細については、Microsoft Platform SDK ドキュメントの MMC 2.0 の使用に関するセクションの「64 ビット Windows での 32 ビットおよび 64 ビット スナップインの実行」トピックを参照してください。 このドキュメントを表示するには、次の Microsoft Web サイトにアクセスしてください。 64 ビット Windows での 32 ビットおよび 64 ビット スナップインの実行
x64 に関する考慮事項
x64 ベースのバージョンの Windows では、32 ビット命令と 64 ビット命令がサポートされています。 WOW64 サブシステムは、プロセッサのネイティブ モードを切り替えることで、ネイティブ 64 ビット モードで 32 ビット プログラムを実行できます。 個別のハードウェアまたはソフトウェア レイヤーは必要ありません。 x64 ベースのバージョンの Windows で 32 ビット プログラムを実行しても、パフォーマンスが低下しない可能性があります。
x64 ベースのプロセッサのパフォーマンスの詳細については、プロセッサの製造元に問い合わせるか、製造元の Web サイトを参照してください。 このドキュメントは暫定版であり、このドキュメントに記載されている情報およびソリューションは、このドキュメントの発行日におけるマイクロソフトの見解を示すものです。 これらのソリューションはマイクロソフトまたはサードパーティ プロバイダーを通じて利用できます。 マイクロソフトは、この資料で説明することがあるサードパーティ プロバイダーまたはサードパーティ ソリューションを特別に推奨するものではありません。 この資料で説明していない、その他のサードパーティ プロバイダーまたはサードパーティ ソリューションが存在する場合もあります。 マイクロソフトは変化する市場の条件に対応する必要があるため、この情報がマイクロソフトの誓約であると解釈しないでください。 マイクロソフトは、マイクロソフトまたはこの資料に記載されているサードパーティ プロバイダーによって提供される情報の正確性およびソリューションの正確性を保証することも、推奨することもできません。
明示、黙示、または法律の規定にかかわらず、マイクロソフトは一切の保証をせず、すべての表示、保証、および条件を排除します。 これらには、サービス、ソリューション、製品、またはその他の素材または情報に関して、タイトルの表明、保証、または条件、非侵害、満足できる条件、商品性、および特定の目的への適合性が含まれますが、これらに限定されません。 マイクロソフトは、いかなる場合においても、この資料に記載されているサードパーティ ソリューションの責任を負いません。
関連情報
AMD64 プロセッサの詳細については、次の Advanced Micro Devices Web サイトを参照してください: AMD Web サイト
Microsoft からは、テクニカル サポートを検索するのに役立つサード パーティの連絡先情報が提供されています。 この連絡先情報は、予告なしに変更される可能性があります。 Microsoft は、このサード パーティの連絡先情報が正確であることを保証しません。
Itanium ベースバージョンの Windows Server 2003 および Windows XP 用のプログラムの開発の詳細については、次の Microsoft Web サイトを参照してください。 64 ビット版 Itanium ベースバージョンの Windows 用アプリケーションの開発に関する概要
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示または黙示にかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。