Контексты активации

Контексты активации — это структуры данных в памяти, содержащие сведения, которые система может использовать для перенаправления приложения для загрузки определенной версии DLL, экземпляра COM-объекта или пользовательской версии окна. Один раздел контекста активации может содержать сведения о перенаправлении БИБЛИОТЕК DLL, которые используются загрузчиком DLL; другой раздел может содержать сведения о COM-сервере. Функции контекста активации используют, создают, активируют и деактивируют контексты активации. Функции активации могут перенаправлять привязку приложения на объекты с именем версии, которые указывают конкретные версии DLL, классы окон, COM-серверы, библиотеки типов и интерфейсы. Дополнительные сведения о функциях и структурах контекста активации см. в справочнике по контексту активации.

Начиная с Windows XP функции контекста активации позволяют Windows использовать сведения в манифестах для создания объектов с именем версии. Если приложение создает процесс путем вызова CreateProcess, Windows проверяет наличие манифеста приложения. Если манифест существует, Windows использует сведения из манифеста для заполнения контекста активации. Так как манифесты описывают зависимость приложения от параллельных версий сборки , объекты, указанные без версий в манифесте, сопоставляются с объектами с именем версии. Например, манифест может описывать библиотеки DLL, файлы, классы окон, COM-серверы, библиотеки типов и интерфейсы.

При создании глобального объекта в контексте активации система автоматически присваивает объекту имя конкретной версии, проконсультировавшись с манифестом. Когда приложение выполняется и запрашивает именованный объект, оно получает объект с именем версии. Это позволяет выполнять несколько версий модуля кода в системе одновременно, не мешая друг другу. Например, оболочка Windows использует манифест для описания зависимости от версии 6.0 COMCTL32 и создания версий оконных классов.

Если приложение создает ресурс путем вызова CreateWindow, процесс задает имя класса для этой функции. Вызов GetCurrentActCtx получает текущий контекст активации и проверяет, существует ли сопоставление для заданного имени класса. Если сопоставление существует, оно будет использовать эту версию вызывающего процесса для разрешения сопоставления и предоставления имени класса для конкретной версии. Windows создает окно с процедурой окна, стилями и другими атрибутами, связанными с именем и версией этого класса.

В большинстве случаев контекстом активации управляет система. Разработчикам приложений и поставщикам сборок обычно не требуется выполнять вызовы к стеку. Приложения могут управлять контекстом активации, напрямую вызывая контекст активации. Дополнительные сведения см. в разделе Использование API контекста активации.