アクティベーション コンテキスト

アクティブ化コンテキスト は、特定の DLL バージョン、COM オブジェクト インスタンス、またはカスタム ウィンドウ バージョンを読み込むアプリケーションをリダイレクトするためにシステムが使用できる情報を含むメモリ内のデータ構造です。 アクティブ化コンテキストの 1 つのセクションには、DLL ローダーによって使用される DLL リダイレクト情報が含まれている場合があります。別のセクションには COM サーバー情報が含まれている場合があります。 アクティブ化コンテキスト関数は、アクティブ化コンテキストを使用、作成、アクティブ化、非アクティブ化します。 アクティブ化関数は、特定の DLL バージョン、ウィンドウ クラス、COM サーバー、タイプ ライブラリ、インターフェイスを指定するバージョン名のオブジェクトにアプリケーションのバインドをリダイレクトできます。 アクティブ化コンテキストの関数と構造体の詳細については、「 アクティブ化コンテキストリファレンス」を参照してください

Windows XP 以降、アクティブ化コンテキスト関数を使用すると、Windows は マニフェスト 内の情報を使用してバージョン名付きオブジェクトを作成できます。 アプリケーションが CreateProcess を呼び出してプロセスを作成する場合、Windows は アプリケーション マニフェストの存在を確認します。 マニフェストが存在する場合、Windows はマニフェスト内の情報を使用してアクティブ化コンテキストを設定します。 マニフェストは、アプリケーションの サイド バイ サイド アセンブリ バージョンへの依存を記述するため、マニフェストでバージョンなしで指定されたオブジェクトは、バージョン名付きオブジェクトにマップされます。 たとえば、マニフェストでは、DLL、ファイル、ウィンドウ クラス、COM サーバー、タイプ ライブラリ、インターフェイスを記述できます。

アクティブ化コンテキスト内でグローバル オブジェクトが作成されると、マニフェストを参照して、オブジェクトにバージョン固有の名前が自動的に与えます。 アプリケーションは、名前付きオブジェクトを実行して要求すると、バージョン名付きオブジェクトを取得します。 これにより、コード モジュールの複数のバージョンを相互に干渉することなく、システム上で同時に実行できます。 たとえば、 Windows シェル ではマニフェストを使用して COMCTL32 のバージョン 6.0 への依存を記述し、ウィンドウ クラスのバージョンを作成します。

アプリケーションが CreateWindow を呼び出してリソースを作成する場合、プロセスはその関数にクラス名を指定します。 GetCurrentActCtx の呼び出しは、現在のアクティブ化コンテキストを取得し、指定されたクラス名のマッピングが存在するかどうかを確認します。 マッピングが存在する場合は、そのバージョンの呼び出しプロセスを使用してマッピングを解決し、バージョン固有のクラス名を指定します。 Windows では、そのクラス名とバージョンに関連付けられたウィンドウ プロシージャ、スタイル、およびその他の属性を含むウィンドウが作成されます。

アクティブ化コンテキストは、ほとんどの場合、システムによって管理されます。 アプリケーション開発者とアセンブリ プロバイダーは、通常、スタックを呼び出す必要はありません。 アプリケーションは、アクティブ化コンテキストを直接呼び出すことによって、アクティブ化コンテキストを管理できます。 詳細については、「 アクティベーション コンテキスト API の使用」を参照してください。