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:
|
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.
- 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 anderen Computer als der aktuelle Computer angibt.
- Es wurde keine explizite COSERVERINFO- Struktur angegeben, aber die angegebene Klasse wird entweder mit dem RemoteServerName oder ActivateAtStorage Registrierungswert 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 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.)
- 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 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.
- 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.
- 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.
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
Erstellen eines Objekts über ein Klassenobjekt