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:
|
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.
- Wenn der Aufruf eine der folgenden Angibt, wird CLSCTX_REMOTE_SERVER impliziert und der Liste der Flags hinzugefügt:
- Eine explizite COSERVERINFO-Struktur , die einen Computer angibt, der sich vom aktuellen Computer unterscheidet.
- Es wurde keine explizite COSERVERINFO-Struktur angegeben, aber die angegebene Klasse wird entweder mit dem Registrierungswert RemoteServerName oder ActivateAtStorage registriert.
- Wenn der explizite COSERVERINFO-Parameter den aktuellen Computer angibt, wird CLSCTX_REMOTE_SERVER entfernt, falls vorhanden.
- 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.)
- 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.
- 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.
- 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.
- 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.
- 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.
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
Erstellen eines Objekts über ein Klassenobjekt