Contextes d’activation

Les contextes d’activation sont des structures de données en mémoire contenant des informations que le système peut utiliser pour rediriger une application afin de charger une version de DLL, un instance d’objet COM particulier ou une version de fenêtre personnalisée. Une section du contexte d’activation peut contenir des informations de redirection de DLL utilisées par le chargeur de DLL ; une autre section peut contenir des informations sur le serveur COM. Les fonctions de contexte d’activation utilisent, créent, activent et désactivent des contextes d’activation. Les fonctions d’activation peuvent rediriger la liaison d’une application vers des objets nommés version qui spécifient des versions de DLL, des classes de fenêtre, des serveurs COM, des bibliothèques de types et des interfaces spécifiques. Pour plus d’informations sur les fonctions et structures du contexte d’activation, consultez la référence du contexte d’activation.

À compter de Windows XP, les fonctions de contexte d’activation permettent à Windows d’utiliser les informations des manifestes pour créer des objets nommés par version. Si une application crée un processus en appelant CreateProcess, Windows vérifie l’existence d’un manifeste d’application. S’il existe un manifeste, Windows utilise les informations du manifeste pour remplir le contexte d’activation. Étant donné que les manifestes décrivent la dépendance d’une application vis-à-vis des versions d’assembly côte à côte , les objets spécifiés sans versions dans le manifeste sont mappés aux objets nommés version. Par exemple, le manifeste peut décrire des DLL, des fichiers, des classes de fenêtre, des serveurs COM, des bibliothèques de types et des interfaces.

Lorsqu’un objet global est créé dans le contexte d’activation, le système donne automatiquement à l’objet un nom spécifique à la version en consultant le manifeste. Lorsque l’application exécute et demande un objet nommé, elle obtient l’objet nommé version. Cela permet à plusieurs versions d’un module de code de s’exécuter sur le système en même temps sans interférer les unes avec les autres. Par exemple, Windows Shell utilise un manifeste pour décrire une dépendance vis-à-vis de la version 6.0 de COMCTL32 et pour créer des versions de classes de fenêtre.

Si une application crée une ressource en appelant CreateWindow, le processus spécifie un nom de classe pour cette fonction. L’appel à GetCurrentActCtx obtient le contexte d’activation actuel et vérifie si un mappage existe pour le nom de classe donné. S’il existe un mappage, il utilise cette version du processus appelant pour résoudre le mappage et fournir le nom de classe spécifique à la version. Windows crée une fenêtre avec la procédure de fenêtre, les styles et d’autres attributs associés à ce nom de classe et à cette version.

Le contexte d’activation est géré par le système dans la plupart des cas. Les développeurs d’applications et les fournisseurs d’assemblys n’ont généralement pas besoin d’effectuer des appels à la pile. Les applications peuvent gérer un contexte d’activation en appelant directement le contexte d’activation. Pour plus d’informations, consultez Utilisation de l’API de contexte d’activation.