CLSCTX-Enumeration (wtypesbase.h)

Werte, die in Aktivierungsaufrufen verwendet werden, um die Ausführungskontexte anzugeben, in denen ein Objekt ausgeführt werden soll. Diese Werte werden auch in Aufrufen von CoRegisterClassObject verwendet, um den Satz von Ausführungskontexten anzugeben, in denen ein Klassenobjekt für Anforderungen zum Erstellen von Instanzen verfügbar gemacht werden soll.

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;

Konstanten

 
CLSCTX_INPROC_SERVER
Wert: 0x1
Der Code, in dem die Objekte dieser Klasse erstellt und verwaltet werden, ist eine DLL, die in demselben Prozess wie der Aufrufer der Funktion ausgeführt wird, die den Klassenkontext angibt.
CLSCTX_INPROC_HANDLER
Wert: 0x2
Bei dem Code, in dem Objekte dieser Klasse verwaltet werden, handelt es sich um einen prozessinternen Handler. Dies ist eine DLL, die im Clientprozess ausgeführt wird und clientseitige Strukturen dieser Klasse implementiert, wenn remote auf Instanzen der -Klasse zugegriffen wird.
CLSCTX_LOCAL_SERVER
Wert: 0x4
Der EXE-Code, in dem die Objekte dieser Klasse erstellt und verwaltet werden, wird auf demselben Computer, jedoch in einem separaten Prozessbereich ausgeführt.
CLSCTX_INPROC_SERVER16
Wert: 0x8
Veraltet.
CLSCTX_REMOTE_SERVER
Wert: 0x10
Ein Remotekontext. Der LocalServer32 - oder LocalService-Code , der Objekte dieser Klasse erstellt und verwaltet, wird auf einem anderen Computer ausgeführt.
CLSCTX_INPROC_HANDLER16
Wert: 0x20
Veraltet.
CLSCTX_RESERVED1
Wert: 0x40
Reserviert.
CLSCTX_RESERVED2
Wert: 0x80
Reserviert.
CLSCTX_RESERVED3
Wert: 0x100
Reserviert.
CLSCTX_RESERVED4
Wert: 0x200
Reserviert.
CLSCTX_NO_CODE_DOWNLOAD
Wert: 0x400
Deaktiviert das Herunterladen von Code aus dem Verzeichnisdienst oder dem Internet. Dieses Flag kann nicht gleichzeitig mit CLSCTX_ENABLE_CODE_DOWNLOAD festgelegt werden.
CLSCTX_RESERVED5
Wert: 0x800
Reserviert.
CLSCTX_NO_CUSTOM_MARSHAL
Wert: 0x1000
Geben Sie an, ob die Aktivierung fehlschlagen soll, wenn benutzerdefiniertes Marshalling verwendet wird.
CLSCTX_ENABLE_CODE_DOWNLOAD
Wert: 0x2000
Ermöglicht das Herunterladen von Code aus dem Verzeichnisdienst oder dem Internet. Dieses Flag kann nicht gleichzeitig mit CLSCTX_NO_CODE_DOWNLOAD festgelegt werden.
CLSCTX_NO_FAILURE_LOG
Wert: 0x4000
Die CLSCTX_NO_FAILURE_LOG kann verwendet werden, um die Protokollierung von Fehlern in CoCreateInstanceEx zu überschreiben.

Wenn activationFailureLoggingLevel erstellt wird, können die folgenden Werte die status der Ereignisprotokollierung bestimmen:


  • 0 = Freie Protokollierung. Standardmäßig protokollieren, aber Clients können überschreiben, indem sie in CoCreateInstanceEx CLSCTX_NO_FAILURE_LOG angeben.

  • 1 = Protokollieren Sie immer alle Fehler, unabhängig davon, was vom Client angegeben wurde.

  • 2 = Notieren Sie nie Fehler, unabhängig vom angegebenen Client. Wenn der Registrierungseintrag fehlt, ist der Standardwert 0. Wenn Sie Kundenanwendungen steuern müssen, empfiehlt es sich, diesen Wert auf 0 festzulegen und den Clientcode zu schreiben, um Fehler zu überschreiben. Es wird dringend empfohlen, den Wert nicht auf 2 festzulegen. Wenn die Ereignisprotokollierung deaktiviert ist, ist es schwieriger, Probleme zu diagnostizieren.

CLSCTX_DISABLE_AAA
Wert: 0x8000
Deaktiviert AAA-Aktivierungen (Activate-As-Activator) nur für diese Aktivierung. Dieses Flag überschreibt die Einstellung des EOAC_DISABLE_AAA-Flags aus der EOLE_AUTHENTICATION_CAPABILITIES-Enumeration. Dieses Flag kann nicht gleichzeitig mit CLSCTX_ENABLE_AAA festgelegt werden. Jede Aktivierung, bei der ein Serverprozess unter der Identität des Aufrufers gestartet wird, wird als aktivierungsbasierte Aktivierung (AAA) bezeichnet. Wenn Sie AAA-Aktivierungen deaktivieren, kann eine Anwendung, die unter einem privilegierten Konto (z. B. LocalSystem) ausgeführt wird, verhindern, dass ihre Identität zum Starten nicht vertrauenswürdiger Komponenten verwendet wird. Bibliotheksanwendungen, die Aktivierungsaufrufe verwenden, sollten dieses Flag während dieser Aufrufe immer festlegen. Dadurch wird verhindert, dass die Bibliotheksanwendung bei einem Sicherheitsangriff zur Eskalation von Berechtigungen verwendet wird. Dies ist die einzige Möglichkeit, AAA-Aktivierungen in einer Bibliotheksanwendung zu deaktivieren, da das EOAC_DISABLE_AAA-Flag aus der EOLE_AUTHENTICATION_CAPABILITIES-Enumeration nur auf den Serverprozess und nicht auf die Bibliotheksanwendung angewendet wird.

Windows 2000: Dieses Flag wird nicht unterstützt.
CLSCTX_ENABLE_AAA
Wert: 0x10000
Aktiviert AAA-Aktivierungen (Activate-As-Activator) nur für diese Aktivierung. Dieses Flag überschreibt die Einstellung des EOAC_DISABLE_AAA-Flags aus der EOLE_AUTHENTICATION_CAPABILITIES-Enumeration. Dieses Flag kann nicht gleichzeitig mit CLSCTX_DISABLE_AAA festgelegt werden. Jede Aktivierung, bei der ein Serverprozess unter der Identität des Aufrufers gestartet wird, wird als aktivierungsbasierte Aktivierung (AAA) bezeichnet. Wenn Sie dieses Flag aktivieren, kann eine Anwendung ihre Identität an eine aktivierte Komponente übertragen.

Windows 2000: Dieses Flag wird nicht unterstützt.
CLSCTX_FROM_DEFAULT_CONTEXT
Wert: 0x20000
Beginnen Sie diese Aktivierung aus dem Standardkontext des aktuellen Apartments.
CLSCTX_ACTIVATE_X86_SERVER
Wert: 0x40000
CLSCTX_ACTIVATE_32_BIT_SERVER
Aktivieren oder Herstellen einer Verbindung mit einer 32-Bit-Version des Servers; fehler, wenn einer nicht registriert ist.
CLSCTX_ACTIVATE_64_BIT_SERVER
Wert: 0x80000
Aktivieren oder Herstellen einer Verbindung mit einer 64-Bit-Version des Servers; fehler, wenn einer nicht registriert ist.
CLSCTX_ENABLE_CLOAKING
Wert: 0x100000
Wenn dieses Flag angegeben ist, verwendet COM das Identitätswechseltoken des Threads, sofern vorhanden, für die Aktivierungsanforderung, die vom Thread gestellt wird. Wenn dieses Flag nicht angegeben ist oder der Thread kein Identitätswechseltoken aufweist, verwendet COM das Prozesstoken des Threadprozesses für die Aktivierungsanforderung des Threads.


Windows Vista oder höher: Dieses Flag wird unterstützt.
CLSCTX_APPCONTAINER
Wert: 0x400000
Gibt an, dass die Aktivierung für einen App-Container gilt.


Hinweis Dieses Flag ist für die interne Verwendung reserviert und nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

 
CLSCTX_ACTIVATE_AAA_AS_IU
Wert: 0x800000
Geben Sie dieses Flag für das Interaktive Benutzeraktivierungsverhalten für As-Activator Server an. Eine Windows Store-App mit dem namen Medium IL kann dieses Flag verwenden, um einen COM-Server "As Activator" ohne starken Namen zu starten. Außerdem können Sie dieses Flag verwenden, um eine Bindung an eine ausgeführte instance des COM-Servers zu erstellen, der von einer Desktopanwendung gestartet wird.

Der Client muss mittlere IL sein, er muss stark benannt sein. Dies bedeutet, dass er eine SysAppID im Clienttoken hat, dass er sich nicht in Sitzung 0 befinden darf und denselben Benutzer wie der Benutzer der Sitzungs-ID im Clienttoken haben muss.

Wenn der Server out-of-process und "As Activator" ist, wird der Server mit dem Token des Sitzungsbenutzers des Clienttokens gestartet. Dieses Token wird nicht stark benannt.

Wenn der Server out-of-process und RunAs "Interactive User" ist, hat dieses Flag keine Auswirkung.

Wenn der Server out-of-process ist und ein anderer RunAs-Typ ist, schlägt die Aktivierung fehl.

Dieses Flag hat keine Auswirkungen auf In-Process-Server.

Aktivierungen außerhalb des Computers schlagen fehl, wenn sie dieses Flag verwenden.
CLSCTX_RESERVED6
Wert: 0x1000000
CLSCTX_ACTIVATE_ARM32_SERVER
Wert: 0x2000000
CLSCTX_PS_DLL
Wert: 0x80000000
Wird zum Laden von Proxy-/Stub-DLLs verwendet.


Hinweis Dieses Flag ist für die interne Verwendung reserviert und nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

 

Hinweise

Werte aus der CLSCTX-Enumeration werden in Aktivierungsaufrufen (CoCreateInstance, CoCreateInstanceEx, CoGetClassObject usw.) verwendet, um die bevorzugten Ausführungskontexte (prozessintern, lokal oder remote) anzugeben, in denen ein Objekt ausgeführt werden soll. Sie werden auch in Aufrufen von CoRegisterClassObject verwendet, um den Satz von Ausführungskontexten anzugeben, in denen ein Klassenobjekt für Anforderungen zum Erstellen von Instanzen verfügbar gemacht werden soll (IClassFactory::CreateInstance).

Um anzugeben, dass mehrere Kontexte akzeptabel sind, können Sie mehrere Werte mit booleschen ORs kombinieren. Die Kontexte werden in der Reihenfolge versucht, in der sie aufgelistet sind.

Bei einer Reihe von CLSCTX-Flags hängt der zu verwendende Ausführungskontext von der Verfügbarkeit registrierter Klassencodes und anderer Parameter gemäß dem folgenden Algorithmus ab.

  1. Wenn der Aufruf eine der folgenden Angibt, wird CLSCTX_REMOTE_SERVER impliziert und der Liste der Flags hinzugefügt:
    1. Eine explizite COSERVERINFO-Struktur , die einen Computer angibt, der sich vom aktuellen Computer unterscheidet.
    2. Es wurde keine explizite COSERVERINFO-Struktur angegeben, aber die angegebene Klasse wird entweder mit dem Registrierungswert RemoteServerName oder ActivateAtStorage registriert.
    Im zweiten Fall können Anwendungen, die vor der Veröffentlichung von verteiltem COM geschrieben wurden, die Konfiguration von Klassen für die Remoteaktivierung sein, die von Clientanwendungen verwendet werden können, die vor DCOM und dem flag CLSCTX_REMOTE_SERVER verfügbar sind. Die Fälle, in denen es keine explizite COSERVERINFO-Struktur gibt, sind, wenn der Wert als NULL angegeben wird oder wenn er nicht einer der Funktionsparameter ist (wie in Aufrufen von CoCreateInstance und CoGetClassObject).
  2. Wenn der explizite COSERVERINFO-Parameter den aktuellen Computer angibt, wird CLSCTX_REMOTE_SERVER entfernt, falls vorhanden.
Der Rest der Verarbeitung wird fortgesetzt, indem die Werte in der folgenden Sequenz betrachtet werden:
  1. Wenn die Flags CLSCTX_REMOTE_SERVER enthalten und kein COSERVERINFO-Parameter angegeben ist und wenn die Aktivierungsanforderung einen persistenten Zustand angibt, von dem aus das Objekt initialisiert werden soll (mit CoGetInstanceFromFile, CoGetInstanceFromIStorage oder, für einen Dateimoniker, in einem Aufruf von IMoniker::BindToObject), und die Klasse verfügt über eine ActivateAtStorage Unterschlüssel oder keine Klassenregistrierungsinformationen, die Anforderung zum Aktivieren und Initialisieren wird an den Computer weitergeleitet, auf dem sich der persistente Zustand befindet. (Weitere Informationen finden Sie in den im Abschnitt Siehe auch aufgeführten Remoteaktivierungsfunktionen.)
  2. Wenn die Flags CLSCTX_INPROC_SERVER enthalten, wird der Klassencode in der DLL unter dem InprocServer32-Schlüssel der Klasse verwendet, wenn dieser Schlüssel vorhanden ist. Der Klassencode wird innerhalb desselben Prozesses wie der Aufrufer ausgeführt.
  3. Wenn die Flags CLSCTX_INPROC_HANDLER enthalten, wird der Klassencode in der DLL unter dem InprocHandler32-Schlüssel der Klasse verwendet, wenn dieser Schlüssel vorhanden ist. Der Klassencode wird innerhalb desselben Prozesses wie der Aufrufer ausgeführt.
  4. Wenn die Flags CLSCTX_LOCAL_SERVER enthalten, wird der Klassencode im Dienst unter dem LocalService-Schlüssel der Klasse verwendet, wenn dieser Schlüssel vorhanden ist. Wenn kein Dienst angegeben wird, aber eine EXE unter demselben Schlüssel angegeben wird, wird der diesem EXE zugeordnete Klassencode verwendet. Der Klassencode (in beiden Fällen) wird in einem separaten Dienstprozess auf demselben Computer wie der Aufrufer ausgeführt.
  5. Wenn das Flag auf CLSCTX_REMOTE_SERVER festgelegt ist und ein zusätzlicher COSERVERINFO-Parameter für die Funktion einen bestimmten Remotecomputer angibt, wird eine Anforderung zur Aktivierung an diesen Remotecomputer weitergeleitet, wobei die Flags geändert wurden, um auf CLSCTX_LOCAL_SERVER festzulegen. Der Klassencode wird in einem eigenen Prozess auf diesem bestimmten Computer ausgeführt, der sich von dem des Aufrufers unterscheiden muss.
  6. Schließlich, wenn die Flags CLSCTX_REMOTE_SERVER enthalten und kein COSERVERINFO-Parameter angegeben ist und wenn ein Computername unter dem Namenswert remoteServerName der Klasse angegeben wird, wird die Anforderung zur Aktivierung an diesen Remotecomputer weitergeleitet, wobei die Flags geändert werden, um auf CLSCTX_LOCAL_SERVER festgelegt zu werden. Der Klassencode wird in einem eigenen Prozess auf diesem bestimmten Computer ausgeführt, der sich von dem des Aufrufers unterscheiden muss.

CLSCTX_ACTIVATE_32_BIT_SERVER und CLSCTX_ACTIVATE_64_BIT_SERVER

Die 64-Bit-Versionen von Windows führen zwei neue Flags ein: CLSCTX_ACTIVATE_32_BIT_SERVER und CLSCTX_ACTIVATE_64_BIT_SERVER. Auf einem 64-Bit-Computer können eine 32-Bit- und eine 64-Bit-Version desselben COM-Servers koexistieren. Wenn ein Client eine Aktivierung eines out-of-Process-Servers anfordert, ermöglichen diese CLSCTX-Flags dem Client, eine 32-Bit- oder eine 64-Bit-Version des Servers anzugeben.

In der Regel ist es einem Client egal, ob er eine 32-Bit- oder eine 64-Bit-Version des Servers verwendet. Wenn der Server selbst jedoch einen zusätzlichen Prozessserver lädt, müssen er und der Prozessserver entweder 32-Bit oder 64-Bit sein. Angenommen, der Client möchte einen Server "A" verwenden, der wiederum einen Prozessserver "B" lädt. Wenn nur eine 32-Bit-Version von Server "B" verfügbar ist, muss der Client die 32-Bit-Version von Server "A" angeben. Wenn nur eine 64-Bit-Version von Server "B" verfügbar ist, muss der Client die 64-Bit-Version von Server "A" angeben.

Ein Server kann seine eigene Architekturpräferenz über den Registrierungsschlüssel PreferredServerBitness angeben, aber die Einstellung des Clients, die über ein CLSCTX_ACTIVATE_32_BIT_SERVER- oder CLSCTX_ACTIVATE_64_BIT_SERVER-Flag angegeben wird, überschreibt die Einstellung des Servers. Wenn der Client keine Einstellung angibt, wird die Einstellung des Servers verwendet.

Wenn weder der Client noch der Server eine Einstellung angibt, dann:

  • Wenn auf dem Computer, auf dem der Server gehostet wird, Windows Server 2003 mit Service Pack 1 (SP1) oder einem späteren System ausgeführt wird, versucht COM, die Serverarchitektur der Clientarchitektur zuzuordnen. Anders ausgedrückt: Für einen 32-Bit-Client aktiviert COM einen 32-Bit-Server, sofern verfügbar; Andernfalls wird eine 64-Bit-Version des Servers aktiviert. Für einen 64-Bit-Client aktiviert COM einen 64-Bit-Server, sofern verfügbar; Andernfalls wird ein 32-Bit-Server aktiviert.
  • Wenn auf dem Computer, auf dem der Server gehostet wird, Windows XP oder Windows Server 2003 ohne SP1 oder höher ausgeführt wird, bevorzugt COM eine 64-Bit-Version des Servers, sofern verfügbar; Andernfalls wird eine 32-Bit-Version des Servers aktiviert.
Wenn für eine CLSCTX-Enumeration sowohl das CLSCTX_ACTIVATE_32_BIT_SERVER- als auch das CLSCTX_ACTIVATE_64_BIT_SERVER-Flag festgelegt ist, ist sie ungültig, und die Aktivierung gibt E_INVALIDARG zurück.

Die folgende Tabelle zeigt die Ergebnisse der verschiedenen Kombinationen von Clientarchitekturen und Clienteinstellungen sowie Serverarchitekturen und Servereinstellungen.

Die Flags CLSCTX_ACTIVATE_32_BIT_SERVER und CLSCTX_ACTIVATE_64_BIT_SERVER über Computergrenzen hinweg fließen. Wenn auf dem Computer, auf dem der Server gehostet wird, das 64-Bit-Windows ausgeführt wird, werden diese Flags berücksichtigt. andernfalls werden sie ignoriert.

32-Bit-Client, kein Flag 64-Bit-Client, kein Flag 32-Bit-Client, 32-Bit-Flag¹ 32-Bit-Client, 64-Bit-Flag² 64-Bit-Client, 32-Bit-Flag¹ 64-Bit-Client, 64-Bit-Flag²
32-Bit-Server, Clientregistrierungswert übereinstimmen³ 32-Bit-Server Siehe ⁸ 32-Bit-Server Siehe ⁸ 32-Bit-Server Siehe ⁸
32-Bit-Server, 32-Bit-Registrierungswert⁴ 32-Bit-Server 32-Bit-Server 32-Bit-Server Siehe ⁸ 32-Bit-Server Siehe ⁸
32-Bit-Server, 64-Bit-Registrierungswert⁵ Siehe ⁸ Siehe ⁸ 32-Bit-Server Siehe ⁸ 32-Bit-Server Siehe ⁸
32-Bit-Server, kein Registrierungswert⁶ 32-Bit-Server 64/32⁹ 32-Bit-Server Siehe ⁸ 32-Bit-Server Siehe ⁸
32-Bit-Server, kein Registrierungswert (vor Windows Server 2003 mit SP1)⁷ 64/32⁹ 64/32⁹ 32-Bit-Server Siehe ⁸ 32-Bit-Server Siehe ⁸
64-Bit-Server, übereinstimmen mit Clientregistrierungswert³ Siehe ⁸ 64-Bit-Server Siehe ⁸ 64-Bit-Server Siehe ⁸ 64-Bit-Server
64-Bit-Server, 32-Bit-Registrierungswert⁴ Siehe ⁸ Siehe ⁸ Siehe ⁸ 64-Bit-Server Siehe ⁸ 64-Bit-Server
64-Bit-Server, 64-Bit-Registrierungswert⁵ 64-Bit-Server 64-Bit-Server Siehe ⁸ 64-Bit-Server Siehe ⁸ 64-Bit-Server
64-Bit-Server, kein Registrierungswert⁶ 32/64¹¹ 64-Bit-Server Siehe ⁸ 64-Bit-Server Siehe ⁸ 64-Bit-Server
64-Bit-Server, kein Registrierungswert (vor Windows Server 2003 mit SP1)⁷ 64-Bit-Server 64-Bit-Server Siehe ⁸ 64-Bit-Server Siehe ⁸ 64-Bit-Server
 

PreferredServerBitnessPreferredServerBitnessPreferredServerBitness PreferredServerBitnessPreferredServerBitness

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Kopfzeile wtypesbase.h

Weitere Informationen

BIND_OPTS2

COSERVERINFO

Cocreateinstance

CoCreateInstanceEx

Cogetclassobject

CoGetInstanceFromFile

CoGetInstanceFromIStorage

CoRegisterClassObject

Erstellen eines Objekts über ein Klassenobjekt

IClassActivator::GetClassObject

Suchen eines Remoteobjekts

Registrieren eines ausgeführten EXE-Servers