Contextos de ativação
Contextos de ativação são estruturas de dados na memória contendo informações que o sistema pode usar para redirecionar um aplicativo para carregar uma versão DLL específica, instância de objeto COM ou versão de janela personalizada. Uma seção do contexto de ativação pode conter informações de redirecionamento de DLL que são usadas pelo carregador de DLL; outra seção pode conter informações do servidor COM. As funções de contexto de ativação usam, criam, ativam e desativam contextos de ativação. As funções de ativação podem redirecionar a ligação de um aplicativo para objetos nomeados por versão que especificam versões específicas de DLL, classes de janela, servidores COM, bibliotecas de tipos e interfaces. Para obter mais informações sobre as funções e estruturas de contexto de ativação, consulte o Activation Context Reference.
A partir do Windows XP, as funções de contexto de ativação permitem que o Windows use informações em manifestos para criar objetos nomeados por versão. Se um aplicativo cria um processo chamando CreateProcess, o Windows verifica a existência de um manifesto de aplicativo . Se existir um manifesto, o Windows usa as informações no manifesto para preencher o contexto de ativação. Como os manifestos descrevem a dependência de um aplicativo em assembly lado a lado versões, os objetos especificados sem versões no manifesto são mapeados para objetos nomeados por versão. Por exemplo, o manifesto pode descrever DLLs, arquivos, classes de janela, servidores COM, bibliotecas de tipos e interfaces.
Quando um objeto global é criado dentro do contexto de ativação, o sistema dá automaticamente ao objeto um nome específico da versão consultando o manifesto. Quando o aplicativo executa e solicita um objeto nomeado, ele obtém o objeto nomeado pela versão. Isso permite que várias versões de um módulo de código sejam executadas no sistema ao mesmo tempo sem interferir umas com as outras. Por exemplo, do Shell do Windows usa um manifesto para descrever uma dependência da versão 6.0 do COMCTL32 e para criar versões de classes de janela.
Se um aplicativo cria um recurso chamando CreateWindow, o processo especifica um nome de classe para essa função. A chamada para GetCurrentActCtx obtém o contexto de ativação atual e verifica se existe um mapeamento para o nome de classe fornecido. Se existir um mapeamento, ele usará essa versão do processo de chamada para resolver o mapeamento e fornecer o nome da classe específica da versão. O Windows cria uma janela com o procedimento de janela, estilos e outros atributos associados a esse nome de classe e versão.
O contexto de ativação é gerenciado pelo sistema na maioria dos casos. Os desenvolvedores de aplicativos e provedores de montagem geralmente não precisam fazer chamadas para a pilha. Os aplicativos podem gerenciar um contexto de ativação chamando diretamente o contexto de ativação. Para obter mais informações, consulte Usando a API de contexto de ativação.