64 ビット バージョンの Windows での 32 ビット プログラムの互換性に関する考慮事項の概要

この記事では、64 ビット バージョンの Windows で実行されている 32 ビット プログラムの互換性に関する考慮事項と制限事項について説明します。

適用対象: Windows 10 - すべてのエディション、Windows Server 2012 R2
元の KB 番号: 896456

概要

Windows の 64 ビット バージョンでは、Microsoft Windows-32 on-Windows-64 (WOW64) サブシステムを使用して、変更せずに 32 ビット プログラムを実行します。 Windows の 64 ビット バージョンでは、16 ビット バイナリまたは 32 ビット ドライバーはサポートされていません。 16 ビット バイナリまたは 32 ビット ドライバーに依存するプログラムは、プログラムの製造元がプログラムの更新プログラムを提供しない限り、64 ビット バージョンの Windows では実行できません。

プログラムの互換性やパフォーマンスに影響する考慮事項がある場合があります。 64 ビット バージョンの Windows でプログラムをテストすることで、プログラムに互換性またはパフォーマンスの問題があるかどうかを判断できます。

この記事では、64 ビット バージョンの Windows で 32 ビット プログラムを実行する場合の互換性に関する考慮事項について説明します。 この記事では、Windows の 32 ビットバージョンと 64 ビット バージョン、または異なる 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 サイト「 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 専用にコンパイルする必要があります。

x64 ベースのバージョンの Windows を実行しているコンピューターに 32 ビット プログラムが 32 ビット ドライバーをインストールしようとすると、ドライバーのインストールは失敗します。 この動作が発生すると、x64 ベースのバージョンの Windows は、32 ビット プログラムにエラーを報告します。

x64 ベース バージョンの Windows を実行しているコンピューターで、32 ビット プログラムが自動スタートアップ用の 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 プラットフォーム SDK ドキュメントの 64 ビット Windows セクションにある「32 ビット アプリケーションの実行」トピックを参照してください。 このドキュメントを表示するには、次の Microsoft Web サイトにある「32 ビット アプリケーションの実行」にアクセスしてください
WOW64 サブシステムは、32 ビット バイナリに変更を加えることなく、32 ビット バイナリ呼び出しをリダイレクトします。 ただし、一部のタスクを実行すると、このリダイレクトの証拠が表示される場合があります。 たとえば、64 ビットのコマンド プロンプトでコマンド ライン スクリプトを入力すると、コマンド プロンプトは Program Files フォルダー内の 32 ビット プログラムにアクセスできない場合があります。 WOW64 サブシステムは、32 ビット プログラムをリダイレクトし、Program Files (x86) フォルダーにインストールします。 正しいフォルダーにアクセスするには、コマンドライン スクリプトを変更する必要があります。 または、32 ビット コマンド プロンプトでコマンド ライン スクリプトを入力する必要があります。 32 ビット コマンド プロンプトは、ファイル システム呼び出しを正しい 32 ビット ディレクトリに自動的にリダイレクトします。

32 ビット コマンド プロンプトを起動するには、次の手順を実行します。

  • [スタート]、[ファイル名を指定して実行] の順にクリックし、「%windir%\SysWoW64\cmd.exe」と入力して、[OK] をクリックします。

バージョン チェック

一部の 32 ビット プログラムは、オペレーティング システムのバージョン情報を調べます。 このチェックを実行する多くの 32 ビット プログラムは、x64 ベース バージョンの Windows を互換性のあるオペレーティング システムとして認識しません。 この現象が発生すると、32 ビット プログラムはバージョン チェック エラーを生成し、終了します。 この現象が発生した場合は、32 ビット プログラムの製造元に問い合わせて、x64 ベース バージョンの Windows と互換性のある更新プログラムを入手してください。

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 サイト)を参照してください。
他社テクニカル サポートのお問い合わせ窓口は、ユーザーの便宜のために提供されているものであり、 将来予告なしに変更されることがあります。 マイクロソフトは、掲載されている情報に対して、いかなる責任も負わないものとします。

Windows Server 2003 およ Windows XP の Itanium ベース版向けのプログラム開発については、Microsoft の Web サイト「64 ビット Itanium ベースの Windows バージョン用アプリケーションの開発の概要」を参照してください。

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示または黙示にかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。