激活上下文

激活上下文 是内存中的数据结构,其中包含系统可用于重定向应用程序以加载特定 DLL 版本、COM 对象实例或自定义窗口版本的信息。 激活上下文的一部分可能包含 DLL 加载程序使用的 DLL 重定向信息;另一节可能包含 COM 服务器信息。 激活上下文函数使用、创建、激活和停用激活上下文。 激活函数可以将应用程序的绑定重定向到指定特定 DLL 版本、窗口类、COM 服务器、类型库和接口的版本命名对象。 有关激活上下文函数和结构的详细信息,请参阅 激活上下文参考

从 Windows XP 开始,激活上下文函数使 Windows 能够使用 清单 中的信息来创建版本命名对象。 如果应用程序通过调用 CreateProcess 创建进程,则 Windows 会检查 是否存在应用程序清单。 如果清单存在,Windows 将使用清单中的信息填充激活上下文。 由于清单描述应用程序对 并行程序集 版本的依赖性,因此清单中没有版本的指定对象将映射到以版本命名的对象。 例如,清单可以描述 DLL、文件、窗口类、COM 服务器、类型库和接口。

在激活上下文中创建全局对象时,系统会通过查阅清单自动为对象指定特定于版本的名称。 当应用程序执行并请求命名对象时,它将获取版本命名对象。 这使多个版本的代码模块可以同时在系统上运行,而不会相互干扰。 例如, Windows Shell 使用清单来描述对 COMCTL32 版本 6.0 的依赖关系,并创建窗口类的版本。

如果应用程序通过调用 CreateWindow 创建资源,则进程将指定该函数的类名。 调用 GetCurrentActCtx 获取当前激活上下文,并检查是否存在给定类名的映射。 如果存在映射,它将使用该版本的调用进程解析映射并提供特定于版本的类名。 Windows 创建一个窗口,其中包含窗口过程、样式以及与该类名称和版本关联的其他属性。

在大多数情况下,激活上下文由系统管理。 应用程序开发人员和程序集提供程序通常不需要调用堆栈。 应用程序可以通过直接调用激活上下文来管理激活上下文。 有关详细信息,请参阅 使用激活上下文 API