Énumération CLSCTX (wtypesbase.h)
Valeurs utilisées dans les appels d’activation pour indiquer les contextes d’exécution dans lesquels un objet doit être exécuté. Ces valeurs sont également utilisées dans les appels à CoRegisterClassObject pour indiquer l’ensemble de contextes d’exécution dans lesquels un objet de classe doit être mis à disposition pour les demandes de construction d’instances.
Syntax
typedef enum tagCLSCTX {
CLSCTX_INPROC_SERVER = 0x1,
CLSCTX_INPROC_HANDLER = 0x2,
CLSCTX_LOCAL_SERVER = 0x4,
CLSCTX_INPROC_SERVER16 = 0x8,
CLSCTX_REMOTE_SERVER = 0x10,
CLSCTX_INPROC_HANDLER16 = 0x20,
CLSCTX_RESERVED1 = 0x40,
CLSCTX_RESERVED2 = 0x80,
CLSCTX_RESERVED3 = 0x100,
CLSCTX_RESERVED4 = 0x200,
CLSCTX_NO_CODE_DOWNLOAD = 0x400,
CLSCTX_RESERVED5 = 0x800,
CLSCTX_NO_CUSTOM_MARSHAL = 0x1000,
CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
CLSCTX_NO_FAILURE_LOG = 0x4000,
CLSCTX_DISABLE_AAA = 0x8000,
CLSCTX_ENABLE_AAA = 0x10000,
CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000,
CLSCTX_ACTIVATE_X86_SERVER = 0x40000,
CLSCTX_ACTIVATE_32_BIT_SERVER,
CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000,
CLSCTX_ENABLE_CLOAKING = 0x100000,
CLSCTX_APPCONTAINER = 0x400000,
CLSCTX_ACTIVATE_AAA_AS_IU = 0x800000,
CLSCTX_RESERVED6 = 0x1000000,
CLSCTX_ACTIVATE_ARM32_SERVER = 0x2000000,
CLSCTX_ALLOW_LOWER_TRUST_REGISTRATION,
CLSCTX_PS_DLL = 0x80000000
} CLSCTX;
Constantes
CLSCTX_INPROC_SERVER Valeur : 0x1 Le code qui crée et gère les objets de cette classe est une DLL qui s'exécute dans le même processus que l'appelant de la fonction spécifiant le contexte de classe. |
CLSCTX_INPROC_HANDLER Valeur : 0x2 Le code qui gère les objets de cette classe est un gestionnaire in-process. Il s’agit d’une DLL qui s’exécute dans le processus client et implémente les structures côté client de cette classe lorsque les instances de la classe sont accessibles à distance. |
CLSCTX_LOCAL_SERVER Valeur : 0x4 Le code EXE qui crée et gère les objets de cette classe s'exécute sur le même ordinateur mais il est chargé dans un espace de processus séparé. |
CLSCTX_INPROC_SERVER16 Valeur : 0x8 Obsolète. |
CLSCTX_REMOTE_SERVER Valeur : 0x10 Contexte distant. Le code LocalServer32 ou LocalService qui crée et gère les objets de cette classe est exécuté sur un autre ordinateur. |
CLSCTX_INPROC_HANDLER16 Valeur : 0x20 Obsolète. |
CLSCTX_RESERVED1 Valeur : 0x40 Réservé. |
CLSCTX_RESERVED2 Valeur : 0x80 Réservé. |
CLSCTX_RESERVED3 Valeur : 0x100 Réservé. |
CLSCTX_RESERVED4 Valeur : 0x200 Réservé. |
CLSCTX_NO_CODE_DOWNLOAD Valeur : 0x400 Désactive le téléchargement de code à partir du service d’annuaire ou d’Internet. Cet indicateur ne peut pas être défini en même temps que CLSCTX_ENABLE_CODE_DOWNLOAD. |
CLSCTX_RESERVED5 Valeur : 0x800 Réservé. |
CLSCTX_NO_CUSTOM_MARSHAL Valeur : 0x1000 Spécifiez si vous souhaitez que l’activation échoue si elle utilise le marshaling personnalisé. |
CLSCTX_ENABLE_CODE_DOWNLOAD Valeur : 0x2000 Permet le téléchargement de code à partir du service d’annuaire ou d’Internet. Cet indicateur ne peut pas être défini en même temps que CLSCTX_NO_CODE_DOWNLOAD. |
CLSCTX_NO_FAILURE_LOG Valeur : 0x4000 Le CLSCTX_NO_FAILURE_LOG peut être utilisé pour remplacer la journalisation des échecs dans CoCreateInstanceEx. Si ActivationFailureLoggingLevel est créé, les valeurs suivantes peuvent déterminer la status de journalisation des événements :
|
CLSCTX_DISABLE_AAA Valeur : 0x8000 Désactive les activations AAA (Activate-As-Activator) pour cette activation uniquement. Cet indicateur remplace le paramètre de l’indicateur EOAC_DISABLE_AAA de l’énumération EOLE_AUTHENTICATION_CAPABILITIES. Cet indicateur ne peut pas être défini en même temps que CLSCTX_ENABLE_AAA. Toute activation dans laquelle un processus serveur serait lancé sous l’identité de l’appelant est appelée activation en tant qu’activateur (AAA). La désactivation des activations AAA permet à une application qui s’exécute sous un compte privilégié (tel que LocalSystem) d’empêcher son identité d’être utilisée pour lancer des composants non approuvés. Les applications de bibliothèque qui utilisent des appels d’activation doivent toujours définir cet indicateur pendant ces appels. Cela permet d’empêcher l’utilisation de l’application de bibliothèque dans le cadre d’une attaque de sécurité par escalade des privilèges. Il s’agit de la seule façon de désactiver les activations AAA dans une application de bibliothèque, car l’indicateur EOAC_DISABLE_AAA de l’énumération EOLE_AUTHENTICATION_CAPABILITIES est appliqué uniquement au processus serveur et non à l’application de bibliothèque. Windows 2000 : Cet indicateur n’est pas pris en charge. |
CLSCTX_ENABLE_AAA Valeur : 0x10000 Active les activations AAA (Activate-As-Activator) pour cette activation uniquement. Cet indicateur remplace le paramètre de l’indicateur EOAC_DISABLE_AAA de l’énumération EOLE_AUTHENTICATION_CAPABILITIES. Cet indicateur ne peut pas être défini en même temps que CLSCTX_DISABLE_AAA. Toute activation dans laquelle un processus serveur serait lancé sous l’identité de l’appelant est appelée activation en tant qu’activateur (AAA). L’activation de cet indicateur permet à une application de transférer son identité vers un composant activé. Windows 2000 : Cet indicateur n’est pas pris en charge. |
CLSCTX_FROM_DEFAULT_CONTEXT Valeur : 0x20000 Commence cette activation à partir du contexte par défaut de l'appartement actuel. |
CLSCTX_ACTIVATE_X86_SERVER Valeur : 0x40000 |
CLSCTX_ACTIVATE_32_BIT_SERVER Activer ou se connecter à une version 32 bits du serveur ; échoue si l’un d’eux n’est pas inscrit. |
CLSCTX_ACTIVATE_64_BIT_SERVER Valeur : 0x80000 Activer ou se connecter à une version 64 bits du serveur ; échoue si l’un d’eux n’est pas inscrit. |
CLSCTX_ENABLE_CLOAKING Valeur : 0x100000 Lorsque cet indicateur est spécifié, COM utilise le jeton d’emprunt d’identité du thread, le cas échéant, pour la demande d’activation effectuée par le thread. Lorsque cet indicateur n’est pas spécifié ou si le thread n’a pas de jeton d’emprunt d’identité, COM utilise le jeton de processus du processus du thread pour la demande d’activation effectuée par le thread. Windows Vista ou version ultérieure : Cet indicateur est pris en charge. |
CLSCTX_APPCONTAINER Valeur : 0x400000 Indique que l’activation concerne un conteneur d’application. Note Cet indicateur est réservé à un usage interne et n’est pas destiné à être utilisé directement à partir de votre code. |
CLSCTX_ACTIVATE_AAA_AS_IU Valeur : 0x800000 Spécifiez cet indicateur pour le comportement d’activation interactive des utilisateurs pour les serveurs As-Activator. Une application du Windows Store Medium IL fortement nommée peut utiliser cet indicateur pour lancer un serveur COM « As Activator » sans nom fort. Vous pouvez également utiliser cet indicateur pour établir une liaison à un instance en cours d’exécution du serveur COM lancé par une application de bureau. Le client doit être moyen IL, il doit avoir un nom fort, ce qui signifie qu’il a un SysAppID dans le jeton client, qu’il ne peut pas être dans la session 0 et qu’il doit avoir le même utilisateur que l’utilisateur de l’ID de session dans le jeton client. Si le serveur est hors processus et « en tant qu’activateur », il lance le serveur avec le jeton de l’utilisateur de session du jeton client. Ce jeton ne sera pas fortement nommé. Si le serveur est hors processus et s’exécute « Utilisateur interactif », cet indicateur n’a aucun effet. Si le serveur est hors processus et qu’il s’agit d’un autre type RunAs, l’activation échoue. Cet indicateur n’a aucun effet pour les serveurs in-process. Les activations hors ordinateur échouent lorsqu’elles utilisent cet indicateur. |
CLSCTX_RESERVED6 Valeur : 0x1000000 |
CLSCTX_ACTIVATE_ARM32_SERVER Valeur : 0x2000000 |
CLSCTX_PS_DLL Valeur : 0x80000000 Utilisé pour le chargement des DLL proxy/stub. Note Cet indicateur est réservé à un usage interne et n’est pas destiné à être utilisé directement à partir de votre code. |
Remarques
Les valeurs de l’énumération CLSCTX sont utilisées dans les appels d’activation (CoCreateInstance, CoCreateInstanceEx, CoGetClassObject, etc.) pour indiquer les contextes d’exécution préférés (in-process, local ou distant) dans lesquels un objet doit être exécuté. Ils sont également utilisés dans les appels à CoRegisterClassObject pour indiquer l’ensemble de contextes d’exécution dans lesquels un objet de classe doit être mis à disposition pour les demandes de construction d’instances (IClassFactory::CreateInstance).
Pour indiquer que plusieurs contextes sont acceptables, vous pouvez combiner plusieurs valeurs avec des UO booléens. Les contextes sont essayés dans l’ordre dans lequel ils sont répertoriés.
Étant donné un ensemble d’indicateurs CLSCTX , le contexte d’exécution à utiliser dépend de la disponibilité des codes de classe inscrits et d’autres paramètres en fonction de l’algorithme suivant.
- Si l’appel spécifie l’un des éléments suivants, CLSCTX_REMOTE_SERVER est implicite et est ajouté à la liste des indicateurs :
- Structure COSERVERINFO explicite indiquant une machine différente de l’ordinateur actuel.
- Aucune structure COSERVERINFO explicite spécifiée, mais la classe spécifiée est inscrite avec la valeur de Registre RemoteServerName ou ActivateAtStorage .
- Si le paramètre COSERVERINFO explicite indique l’ordinateur actuel, CLSCTX_REMOTE_SERVER est supprimé s’il est présent.
- Si les indicateurs incluent CLSCTX_REMOTE_SERVER et qu’aucun paramètre COSERVERINFO n’est spécifié et si la demande d’activation indique un état persistant à partir duquel initialiser l’objet (avec CoGetInstanceFromFile, CoGetInstanceFromIStorage ou, pour un moniker de fichier, dans un appel à IMoniker::BindToObject) et que la classe a un ActivateAtStorage sous-clé ou aucune information de registre de classe, la demande d’activation et d’initialisation est transférée à l’ordinateur où réside l’état persistant. (Pour plus d’informations, reportez-vous aux fonctions d’activation à distance répertoriées dans la section Voir aussi.)
- Si les indicateurs incluent CLSCTX_INPROC_SERVER, le code de classe dans la DLL trouvée sous la clé InprocServer32 de la classe est utilisé si cette clé existe. Le code de classe s’exécute dans le même processus que l’appelant.
- Si les indicateurs incluent CLSCTX_INPROC_HANDLER, le code de classe dans la DLL qui se trouve sous la clé InprocHandler32 de la classe est utilisé si cette clé existe. Le code de classe s’exécute dans le même processus que l’appelant.
- Si les indicateurs incluent CLSCTX_LOCAL_SERVER, le code de classe dans le service qui se trouve sous la clé LocalService de la classe est utilisé si cette clé existe. Si aucun service n’est spécifié, mais qu’un EXE est spécifié sous cette même clé, le code de classe associé à cette EXE est utilisé. Le code de classe (dans les deux cas) sera exécuté dans un processus de service distinct sur le même ordinateur que l’appelant.
- Si l’indicateur est défini sur CLSCTX_REMOTE_SERVER et qu’un paramètre COSERVERINFO supplémentaire pour la fonction spécifie un ordinateur distant particulier, une demande d’activation est transmise à cet ordinateur distant avec les indicateurs modifiés pour définir sur CLSCTX_LOCAL_SERVER. Le code de classe s’exécute dans son propre processus sur cet ordinateur spécifique, qui doit être différent de celui de l’appelant.
- Enfin, si les indicateurs incluent CLSCTX_REMOTE_SERVER et qu’aucun paramètre COSERVERINFO n’est spécifié et qu’un nom d’ordinateur est donné sous la valeur nommée RemoteServerName de la classe, la demande d’activation est transmise à cet ordinateur distant avec les indicateurs modifiés pour être définis sur CLSCTX_LOCAL_SERVER. Le code de classe s’exécute dans son propre processus sur cet ordinateur spécifique, qui doit être différent de celui de l’appelant.
CLSCTX_ACTIVATE_32_BIT_SERVER et CLSCTX_ACTIVATE_64_BIT_SERVER
Les versions 64 bits de Windows introduisent deux nouveaux indicateurs : CLSCTX_ACTIVATE_32_BIT_SERVER et CLSCTX_ACTIVATE_64_BIT_SERVER. Sur un ordinateur 64 bits, une version 32 bits et 64 bits du même serveur COM peut coexister. Lorsqu’un client demande l’activation d’un serveur hors processus, ces indicateurs CLSCTX permettent au client de spécifier une version 32 bits ou 64 bits du serveur.En règle générale, un client ne se soucie pas de savoir s’il utilise une version 32 bits ou 64 bits du serveur. Toutefois, si le serveur lui-même charge un serveur in-process supplémentaire, celui-ci et le serveur in-process doivent être 32 bits ou 64 bits. Par exemple, supposons que le client souhaite utiliser un serveur « A », qui charge à son tour un serveur in-process « B ». Si seule une version 32 bits du serveur « B » est disponible, le client doit spécifier la version 32 bits du serveur « A ». Si seule une version 64 bits du serveur « B » est disponible, le client doit spécifier la version 64 bits du serveur « A ».
Un serveur peut spécifier sa propre préférence d’architecture via la clé de Registre PreferredServerBitness, mais la préférence du client, spécifiée via un indicateur CLSCTX_ACTIVATE_32_BIT_SERVER ou CLSCTX_ACTIVATE_64_BIT_SERVER, remplace la préférence du serveur. Si le client ne spécifie pas de préférence, la préférence du serveur est utilisée.
Si ni le client ni le serveur ne spécifient de préférence, alors :
- Si l’ordinateur qui héberge le serveur exécute Windows Server 2003 avec Service Pack 1 (SP1) ou un système ultérieur, COM essaie de faire correspondre l’architecture du serveur à l’architecture cliente. En d’autres termes, pour un client 32 bits, COM active un serveur 32 bits si disponible ; sinon, il active une version 64 bits du serveur. Pour un client 64 bits, COM active un serveur 64 bits si disponible ; sinon, un serveur 32 bits est activé.
- Si l’ordinateur qui héberge le serveur exécute Windows XP ou Windows Server 2003 sans SP1 ou version ultérieure installée, COM préférera une version 64 bits du serveur si disponible ; sinon, il active une version 32 bits du serveur.
Le tableau suivant montre les résultats des différentes combinaisons d’architectures clientes et de paramètres client, d’architectures de serveur et de paramètres serveur.
Les indicateurs CLSCTX_ACTIVATE_32_BIT_SERVER et CLSCTX_ACTIVATE_64_BIT_SERVER circulent au-delà des limites de l’ordinateur. Si l’ordinateur qui héberge le serveur exécute windows 64 bits, il respecte ces indicateurs ; sinon, il les ignorera.
Client 32 bits, aucun indicateur | Client 64 bits, aucun indicateur | Client 32 bits, indicateur 32 bits¹ | Client 32 bits, indicateur 64 bits² | Client 64 bits, indicateur 32 bits¹ | Client 64 bits, indicateur 64 bits² | |
---|---|---|---|---|---|---|
Serveur 32 bits, correspondance de la valeur du Registre client³ | Serveur 32 bits | Voir ⁸ | Serveur 32 bits | Voir ⁸ | Serveur 32 bits | Voir ⁸ |
Serveur 32 bits, valeur de Registre 32 bits⁴ | Serveur 32 bits | Serveur 32 bits | Serveur 32 bits | Voir ⁸ | Serveur 32 bits | Voir ⁸ |
Serveur 32 bits, valeur de Registre 64 bits⁵ | Voir ⁸ | Voir ⁸ | Serveur 32 bits | Voir ⁸ | Serveur 32 bits | Voir ⁸ |
Serveur 32 bits, aucune valeur de Registre⁶ | Serveur 32 bits | 64/32⁹ | Serveur 32 bits | Voir ⁸ | Serveur 32 bits | Voir ⁸ |
Serveur 32 bits, aucune valeur de Registre (avant Windows Server 2003 avec SP1)⁷ | 64/32⁹ | 64/32⁹ | Serveur 32 bits | Voir ⁸ | Serveur 32 bits | Voir ⁸ |
Serveur 64 bits, correspondance de la valeur du Registre client³ | Voir ⁸ | Serveur 64 bits | Voir ⁸ | Serveur 64 bits | Voir ⁸ | Serveur 64 bits |
Serveur 64 bits, valeur de Registre 32 bits⁴ | Voir ⁸ | Voir ⁸ | Voir ⁸ | Serveur 64 bits | Voir ⁸ | Serveur 64 bits |
Serveur 64 bits, valeur de Registre 64 bits⁵ | Serveur 64 bits | Serveur 64 bits | Voir ⁸ | Serveur 64 bits | Voir ⁸ | Serveur 64 bits |
Serveur 64 bits, aucune valeur de Registre⁶ | 32/64¹⁰ | Serveur 64 bits | Voir ⁸ | Serveur 64 bits | Voir ⁸ | Serveur 64 bits |
Serveur 64 bits, aucune valeur de Registre (avant Windows Server 2003 avec SP1)⁷ | Serveur 64 bits | Serveur 64 bits | Voir ⁸ | Serveur 64 bits | Voir ⁸ | Serveur 64 bits |
PreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitness
Spécifications
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau uniquement] |
En-tête | wtypesbase.h |
Voir aussi
Création d’un objet par le biais d’un objet Class
IClassActivator::GetClassObject