互換性修正プログラムの詳細および使用方法
Compatibility Fix Infrastructure のしくみ
Windows(R) オペレーティング システムが進化して新しいテクノロジや機能をサポートするのに伴い、一部の機能の実装が変更される場合があります。その場合、元の実装に依存していたアプリケーションで問題が発生する可能性があります。互換性の問題は、Microsoft Windows Application Compatibility (Compatibility Fix) Infrastructure を使ってアプリの特定のバージョンを対象とする特定のアプリ修正プログラムを作れば回避できます。Compatibility Fix Infrastructure は、API のリンク機能を使って、Windows コードから互換性修正プログラムを実装する代替コードに直接アプリケーションをリダイレクトします。
Windows の移植可能な実行可能ファイル形式には、ヘッダーが含まれており、このヘッダーには、アプリケーションとリンク先のファイル間の間接レイヤーを提供するために使われるデータ ディレクトリが含まれています。次の図に示すように、API による外部のバイナリ ファイルの呼び出しはインポート アドレス テーブル (IAT) を介して実行され、ここから Windows オペレーティング システムが直接呼び出されます。
次の図に示すように、IAT 内の影響を受ける Windows 機能のアドレスが、互換性修正プログラムのコードを指すように変更されます。
注意
静的にリンクされた DLL の場合、コードのリダイレクトはアプリケーションの読み込み時に行われます。動的にリンクされた DLL については、GetProcAddress API をフックすることで修正できます。
Compatibility Fix Infrastructure の設計による影響
Compatibility Fix Infrastructure の特性に合わせて、アプリケーションの修正プログラム戦略を決定する際に留意する必要がある重要な考慮事項がいくつかあります。
(上の図に示すように) 互換性修正プログラムは、Windows オペレーティング システムの一部ではありません。したがって、アプリケーションのコードと同じセキュリティ制限が互換性修正プログラムに適用されます。つまり、互換性修正プログラムを使ってオペレーティング システムのセキュリティ メカニズムを回避することはできません。したがって、互換性修正プログラムによってセキュリティ上のリスクが高くなることはなありません。また、互換性修正プログラムを実装するためにセキュリティの設定を引き下げる必要もありません。
Compatibility Fix Infrastructure は、アプリケーションがオペレーティング システムを呼び出す前に、そのアプリケーション内に追加コードを挿入します。つまり、互換性修正プログラムによって実行されるすべての修正内容は、アプリケーション コードを修正することで対応できるということです。
互換性修正プログラムは、ユーザーモード アプリケーション プロセス内で、ユーザーモード コードとして実行されます。つまり、互換性修正プログラムを使ってカーネル モード コードの問題を修正することはできません。たとえば、デバイス ドライバーの問題を解決するために互換性修正プログラムを使うことはできません。
注意
一部のウイルス対策、ファイアウォール、およびスパイウェア対策のコードは、カーネル モードで動作します
互換性修正プログラムを使う状況の判断
互換性の問題を解決するために互換性修正プログラムを使うかどうかを判断することは、単なる技術的な問題ではありません。次のシナリオは、互換性修正プログラムを使うその他の一般的な理由を表しています。
シナリオ 1
ベンダーによるサポートが終了したアプリケーションに互換性の問題がある場合。
多くの企業では、ベンダーによるサポートが終了したアプリケーションを実行することがあります。このような場合、ベンダーに修正を頼むことはできませんし、自社で問題を解決するためにソース コードにアクセスすることもできません。しかし、互換性修正プログラムを使うと、互換性の問題を解決することができます。
シナリオ 2
互換性の問題が内部で作成したアプリケーションにある場合。
問題を解決するためにはアプリケーション コードを修正するのが望ましいとはいえ、いつでもコードを修正できるとは限りません。社内のチームでは、新しいオペレーティング システムを展開するまでに、すべての問題を修正できない場合もあります。その代わり、対応可能な問題に対しては互換性修正プログラムによる対応を選ぶことができる場合があります。そして、この方法で解決できない問題のみ、社内のチームでコードを修正します。この方法を使うと、チームでは時間の許す限りアプリケーションの修正が可能となり、お使いの環境への新しいオペレーティング システムの展開を遅らせることもありません。
シナリオ 3
互換性のあるバージョンが近い将来リリースされる予定のアプリケーション、またはバージョンに関係なく組織にとって重大ではないアプリケーションに互換性の問題がある場合。
アプリケーションが組織にとって重要でなくても、互換性のある新しいバージョンが近い将来リリースされるとしても、このような場合、一時的な解決策として互換性修正プログラムを使うことができます。これにより、新しいオペレーティング システムの展開を遅らせことなく、アプリケーションを継続して使用することができ、新しいバージョンがリリースされたら直ちに現在の構成を更新できます。
修正するアプリケーションのバージョンの特定
"対象バージョンを含むそれ以前のバージョン" 句を使うか、特定のバージョンを選ぶと、アプリケーションの特定のバージョンに互換性修正プログラムを適用できます。つまり、アプリケーションの次のバージョンに対しては、互換性修正プログラムは自動的に適用されません。これは重要な方法です。その理由は、アプリケーションを継続して使うことができ、さらにベンダーに対してアプリケーションの修正を要求することができるためです。
互換性修正プログラムのサポート
互換性修正プログラムは、Windows オペレーティング システムの一部として出荷され、Windows Update を使って更新されます。そのため、Windows 自体と同じレベルでサポートされます。
互換性修正プログラムは、どのようなアプリケーションに対しても適用できます。ただし、Microsoft では、Compatibility Fix Infrastructure を使ってユーザー独自のカスタム修正プログラムを作成するためのツールは提供していません。