Freigeben über


CLSCTX-Aufzählung (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 zur Verfügung gestellt 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, der Objekte dieser Klasse erstellt und verwaltet, ist eine DLL, die im gleichen Prozess ausgeführt wird wie der Aufrufer der Funktion, die den Klassenkontext angibt.
CLSCTX_INPROC_HANDLER
Wert: 0x2
Der Code, der Objekte dieser Klasse verwaltet, ist ein Prozesshandler. Dies ist eine DLL, die im Clientprozess ausgeführt wird und clientseitige Strukturen dieser Klasse implementiert, wenn Remotezugriff auf Instanzen der Klasse erfolgt.
CLSCTX_LOCAL_SERVER
Wert: 0x4
Der EXE-Code, der Objekte dieser Klasse erstellt und verwaltet, wird auf demselben Computer ausgeführt, aber in einem separaten Prozessbereich geladen.
CLSCTX_INPROC_SERVER16
Wert: 0x8
Obsolet.
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
Obsolet.
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 Kennzeichen 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 fehlschlägt, wenn sie benutzerdefinierte Marshalling verwendet.
CLSCTX_ENABLE_CODE_DOWNLOAD
Wert: 0x2000
Ermöglicht das Herunterladen von Code aus dem Verzeichnisdienst oder dem Internet. Dieses Kennzeichen 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-außer Kraft zu setzen.

Wenn der ActivationFailureLoggingLevel erstellt wird, können die folgenden Werte den Status der Ereignisprotokollierung bestimmen:


  • 0 = Diskretionäre Protokollierung. Log by default, but clients can override by specifying CLSCTX_NO_FAILURE_LOG in CoCreateInstanceEx.

  • 1 = Immer alle Fehler protokollieren, unabhängig davon, was der Client angegeben hat.

  • 2 = Nie Fehler protokollieren, unabhängig vom angegebenen Client. Wenn der Registrierungseintrag fehlt, ist der Standardwert 0. Wenn Sie Kundenanwendungen steuern müssen, wird empfohlen, diesen Wert auf 0 festzulegen und den Clientcode zum Außerkraftsetzen von Fehlern zu schreiben. 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 nur aktivierungsbasierte Aktivierungen (Activate-as-Activateor, AAA) für diese Aktivierung. Dieses Flag setzt die Einstellung des EOAC_DISABLE_AAA Flags aus der EOLE_AUTHENTICATION_CAPABILITIES-Aufzählung außer Kraft. Dieses Kennzeichen 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 (Activate-as-Activateor, AAA) bezeichnet. Durch das Deaktivieren von AAA-Aktivierungen kann eine Anwendung, die unter einem privilegierten Konto (z. B. LocalSystem) ausgeführt wird, verhindern, dass ihre Identität verwendet wird, um nicht vertrauenswürdige Komponenten zu starten. Bibliotheksanwendungen, die Aktivierungsaufrufe verwenden, sollten diese Kennzeichnung während dieser Aufrufe immer festlegen. Dadurch wird verhindert, dass die Bibliotheksanwendung in einem Eskalations-of-Privilege-Sicherheitsangriff 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 aktivierungsbasierte Aktivierungen (AAA) nur für diese Aktivierung. Dieses Flag setzt die Einstellung des EOAC_DISABLE_AAA Flags aus der EOLE_AUTHENTICATION_CAPABILITIES-Aufzählung außer Kraft. Dieses Kennzeichen 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 (Activate-as-Activateor, AAA) bezeichnet. Durch Aktivieren dieses Flags kann eine Anwendung ihre Identität auf 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 der aktuellen Wohnung.
CLSCTX_ACTIVATE_X86_SERVER
Wert: 0x40000
CLSCTX_ACTIVATE_32_BIT_SERVER
Aktivieren oder Herstellen einer Verbindung mit einer 32-Bit-Version des Servers; schlägt fehl, wenn eine nicht registriert ist.
CLSCTX_ACTIVATE_64_BIT_SERVER
Wert: 0x80000
Aktivieren oder Herstellen einer Verbindung mit einer 64-Bit-Version des Servers; schlägt fehl, wenn eine nicht registriert ist.
CLSCTX_ENABLE_CLOAKING
Wert: 0x100000
Wenn dieses Flag angegeben wird, verwendet COM das Identitätswechseltoken des Threads, falls vorhanden, für die Aktivierungsanforderung, die vom Thread vorgenommen wurde. Wenn dieses Flag nicht angegeben wird oder der Thread kein Identitätswechseltoken besitzt, verwendet COM das Prozesstoken des Threadprozesses für die Vom Thread vorgenommene Aktivierungsanforderung.


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


Hinweis Dieses Kennzeichen ist für die interne Verwendung reserviert und soll nicht direkt aus Ihrem Code verwendet werden.

 
CLSCTX_ACTIVATE_AAA_AS_IU
Wert: 0x800000
Geben Sie dieses Kennzeichen für das Interaktive Benutzeraktivierungsverhalten für As-Activator-Server an. Eine stark benannte Windows Store-App für mittlere IL kann dieses Kennzeichen verwenden, um einen COM-Server "As Activator" ohne starken Namen zu starten. Sie können dieses Flag auch verwenden, um eine Bindung an eine ausgeführte Instanz des COM-Servers zu erstellen, die von einer Desktopanwendung gestartet wird.

Der Client muss "Mittlere IL" sein, er muss stark benannt werden, was bedeutet, dass er eine SysAppID im Clienttoken aufweist, er kann nicht in Sitzung 0 sein, und er muss denselben Benutzer wie der Benutzer der Sitzungs-ID im Clienttoken haben.

Wenn der Server nicht verarbeitet und "As Activator" ausgeführt wird, startet er den Server mit dem Token des Sitzungsbenutzers des Clienttokens. Dieses Token wird nicht stark benannt.

Wenn der Server außerhalb des Prozesses ist und RunAs "Interactive User" ausgeführt wird, hat dieses Flag keine Auswirkung.

Wenn der Server außerhalb des Prozesses ist und ein anderer RunAs-Typ ist, schlägt die Aktivierung fehl.

Dieses Kennzeichen hat keine Auswirkung für In-Process-Server.

Off-machine activations fail when they use this flag.
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 Kennzeichen ist für die interne Verwendung reserviert und soll nicht direkt aus Ihrem Code verwendet werden.

Bemerkungen

Werte aus der CLSCTX--Aufzählung werden in Aktivierungsaufrufen verwendet (CoCreateInstance, CoCreateInstanceEx, CoGetClassObjectusw.), um die bevorzugten Ausführungskontexte (In-Process, local 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 zur Verfügung gestellt werden soll (IClassFactory::CreateInstance).

Um anzugeben, dass mehr als ein Kontext akzeptabel ist, können Sie mehrere Werte mit booleschen ORs kombinieren. Die Kontexte werden in der Reihenfolge ausprobiert, 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 anderen Parametern 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 anderen Computer als der aktuelle Computer angibt.
    2. Es wurde keine explizite COSERVERINFO- Struktur angegeben, aber die angegebene Klasse wird entweder mit dem RemoteServerName oder ActivateAtStorage Registrierungswert registriert.
    Im zweiten Fall können Anwendungen, die vor der Veröffentlichung verteilter COM geschrieben wurden, die Konfiguration von Klassen für die Remoteaktivierung sein, die von Clientanwendungen verwendet werden, die vor DCOM und dem CLSCTX_REMOTE_SERVER Flag verfügbar sind. Die Fälle, in denen es keine explizite COSERVERINFO- Struktur geben würde, wenn der Wert als NULL- angegeben wird oder wenn es sich nicht um einen der Funktionsparameter handelt (wie bei 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 beständigen Zustand angibt, aus dem das Objekt initialisiert werden soll (mit CoGetInstanceFromFile, CoGetInstanceFromIStorageoder, für einen Dateimoniker, in einem Aufruf von IMoniker::BindToObject) und die Klasse verfügt über einen ActivateAtStorage Unterschlüssel oder keine Klassenregistrierungsinformationen, die Anforderung zum Aktivieren und Initialisieren wird an den Computer weitergeleitet, auf dem sich der persistente Zustand befindet. (Ausführliche 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 ist, aber unter demselben Schlüssel eine EXE angegeben wird, wird der klassencode verwendet, der mit dieser EXE verknüpft ist. Der Klassencode (in beiden Fällen) wird in einem separaten Dienstprozess auf demselben Computer wie der Aufrufer ausgeführt.
  5. Wenn die Kennzeichnung auf CLSCTX_REMOTE_SERVER und einen zusätzlichen COSERVERINFO Parameter für die Funktion angibt, wird eine Aktivierungsanforderung an diesen Remotecomputer weitergeleitet, wobei flags geändert werden, die auf CLSCTX_LOCAL_SERVER festgelegt sind. Der Klassencode wird in einem eigenen Prozess auf diesem bestimmten Computer ausgeführt, der sich von dem des Aufrufers unterscheiden muss.
  6. Wenn die Flags CLSCTX_REMOTE_SERVER enthalten und kein COSERVERINFO Parameter angegeben wird und wenn ein Computername unter dem RemoteServerName der Klasse benannten Wert angegeben wird, wird die Aktivierungsanforderung an diesen Remotecomputer weitergeleitet, wobei die kennzeichen geändert wurden, die auf CLSCTX_LOCAL_SERVER festgelegt 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

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

In der Regel kümmert sich ein Client nicht darum, ob er eine 32-Bit- oder eine 64-Bit-Version des Servers verwendet. Wenn der Server selbst jedoch einen zusätzlichen In-Process-Server lädt, muss er und der In-Process-Server entweder 32-Bit- oder 64-Bit-Version 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 des Servers "A" angeben. Wenn nur eine 64-Bit-Version von Server "B" verfügbar ist, muss der Client die 64-Bit-Version des Servers "A" angeben.

Ein Server kann seine eigene Architektureinstellung über den PreferredServerBitness Registrierungsschlüssel angeben, die Einstellung des Clients, die über ein CLSCTX_ACTIVATE_32_BIT_SERVER- oder CLSCTX_ACTIVATE_64_BIT_SERVER-Flag angegeben wird, setzt jedoch die Einstellung des Servers außer Kraft. Wenn der Client keine Einstellung angibt, wird die Einstellung des Servers verwendet.

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

  • Wenn der Computer, auf dem der Server gehostet wird, Windows Server 2003 mit Service Pack 1 (SP1) oder einem höheren System ausgeführt wird, versucht COM, die Serverarchitektur mit der Clientarchitektur abzugleichen. Anders ausgedrückt: Bei einem 32-Bit-Client aktiviert COM einen 32-Bit-Server, falls verfügbar; andernfalls wird eine 64-Bit-Version des Servers aktiviert. Bei einem 64-Bit-Client aktiviert COM einen 64-Bit-Server, falls verfügbar; andernfalls wird ein 32-Bit-Server aktiviert.
  • Wenn der Computer, auf dem der Server gehostet wird, Windows XP oder Windows Server 2003 ohne SP1 oder höher installiert ist, bevorzugt COM ggf. eine 64-Bit-Version des Servers. andernfalls wird eine 32-Bit-Version des Servers aktiviert.
Wenn eine CLSCTX--Aufzählung sowohl die CLSCTX_ACTIVATE_32_BIT_SERVER als auch CLSCTX_ACTIVATE_64_BIT_SERVER Flags festgelegt hat, 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 Kennzeichnungen CLSCTX_ACTIVATE_32_BIT_SERVER und CLSCTX_ACTIVATE_64_BIT_SERVER über Computergrenzen hinweg fließen. Wenn der Computer, auf dem der Server gehostet wird, die 64-Bit-Version von Windows ausführt, berücksichtigt er diese Flags. andernfalls werden sie ignoriert.

32-Bit-Client ohne Kennzeichnung 64-Bit-Client ohne Kennzeichnung 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, mit clientregistrierungswert übereinstimmen 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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 2000 Professional [nur Desktop-Apps]
mindestens unterstützte Server- Windows 2000 Server [nur Desktop-Apps]
Header- wtypesbase.h

Siehe auch

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