Contextos de ativação
Os contextos de ativação são estruturas de dados na memória que contêm informações que o sistema pode usar para redirecionar um aplicativo para carregar uma versão de DLL específica, uma instância de objeto COM ou uma 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 associação de um aplicativo para objetos com nome de versão que especificam versões de DLL específicas, 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 a Referência de contexto de ativação.
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 com nome de versão. Se um aplicativo criar um processo chamando CreateProcess, o Windows verificará a existência de um manifesto do aplicativo. Se existir um manifesto, o Windows usará as informações no manifesto para preencher o contexto de ativação. Como os manifestos descrevem a dependência de um aplicativo em versões de assembly lado a lado , os objetos especificados sem versões no manifesto são mapeados para objetos com nome de 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 automaticamente fornece ao objeto um nome específico da versão consultando o manifesto. Quando o aplicativo é executado 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 nas outras. Por exemplo, o Windows Shell 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 criar um recurso chamando CreateWindow, o processo especificará 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 resolve 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 assembly normalmente 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.