Contesti di attivazione
I contesti di attivazione sono strutture di dati in memoria contenenti informazioni che il sistema può usare per reindirizzare un'applicazione per caricare una determinata versione dll, un'istanza dell'oggetto COM o una versione personalizzata della finestra. Una sezione del contesto di attivazione può contenere informazioni di reindirizzamento DLL usate dal caricatore DLL; un'altra sezione può contenere informazioni sul server COM. Le funzioni del contesto di attivazione usano, creano, attivano e disattivano i contesti di attivazione. Le funzioni di attivazione possono reindirizzare l'associazione di un'applicazione a oggetti denominati dalla versione che specificano versioni dll specifiche, classi di finestre, server COM, librerie dei tipi e interfacce. Per altre informazioni sulle funzioni e le strutture del contesto di attivazione, vedere Riferimento al contesto di attivazione.
A partire da Windows XP, le funzioni del contesto di attivazione consentono a Windows di usare le informazioni nei manifesti per creare oggetti denominati dalla versione. Se un'applicazione crea un processo chiamando CreateProcess, Windows verifica l'esistenza di un manifesto dell'applicazione. Se esiste un manifesto, Windows usa le informazioni nel manifesto per popolare il contesto di attivazione. Poiché i manifesti descrivono la dipendenza di un'applicazione dalle versioni di assembly side-by-side , gli oggetti specificati senza versioni nel manifesto vengono mappati a oggetti denominati dalla versione. Ad esempio, il manifesto può descrivere DLL, file, classi di finestre, server COM, librerie dei tipi e interfacce.
Quando un oggetto globale viene creato all'interno del contesto di attivazione, il sistema assegna automaticamente all'oggetto un nome specifico della versione consultando il manifesto. Quando l'applicazione viene eseguita e richiede un oggetto denominato, ottiene l'oggetto con nome di versione. Ciò consente l'esecuzione di più versioni di un modulo di codice nel sistema contemporaneamente senza interferire tra loro. Ad esempio, Windows Shell usa un manifesto per descrivere una dipendenza dalla versione 6.0 di COMCTL32 e per creare versioni delle classi finestra.
Se un'applicazione crea una risorsa chiamando CreateWindow, il processo specifica un nome di classe per tale funzione. La chiamata a GetCurrentActCtx ottiene il contesto di attivazione corrente e verifica se esiste un mapping per il nome della classe specificato. Se esiste un mapping, verrà usata tale versione del processo chiamante per risolvere il mapping e specificare il nome della classe specifica della versione. Windows crea una finestra con la routine della finestra, gli stili e altri attributi associati al nome e alla versione della classe.
Il contesto di attivazione viene gestito dal sistema nella maggior parte dei casi. Gli sviluppatori di applicazioni e i provider di assembly non devono in genere effettuare chiamate allo stack. Le applicazioni possono gestire un contesto di attivazione chiamando direttamente il contesto di attivazione. Per altre informazioni, vedere Uso dell'API del contesto di attivazione.