Enumerazione CLSCTX (wtypesbase.h)
Valori usati nelle chiamate di attivazione per indicare i contesti di esecuzione in cui eseguire un oggetto. Questi valori vengono usati anche nelle chiamate a CoRegisterClassObject per indicare il set di contesti di esecuzione in cui un oggetto classe deve essere reso disponibile per le richieste per costruire istanze.
Sintassi
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;
Costanti
CLSCTX_INPROC_SERVER Valore: 0x1 Il codice tramite cui vengono creati e gestiti gli oggetti di questa classe è una DLL che viene eseguita nello stesso processo del chiamante della funzione che specifica il contesto della classe. |
CLSCTX_INPROC_HANDLER Valore: 0x2 Il codice tramite cui vengono gestiti gli oggetti di questa classe è un gestore in-process. Si tratta di una DLL eseguita nel processo client e implementa le strutture lato client di questa classe quando le istanze della classe vengono accessibili in remoto. |
CLSCTX_LOCAL_SERVER Valore: 0x4 Il codice EXE tramite cui vengono creati e gestiti gli oggetti di questa classe viene eseguito nello stesso computer, ma viene caricato in uno spazio processi distinto. |
CLSCTX_INPROC_SERVER16 Valore: 0x8 Obsoleta. |
CLSCTX_REMOTE_SERVER Valore: 0x10 Contesto remoto. Il codice LocalServer32 o LocalService che crea e gestisce gli oggetti di questa classe viene eseguito in un computer diverso. |
CLSCTX_INPROC_HANDLER16 Valore: 0x20 Obsoleta. |
CLSCTX_RESERVED1 Valore: 0x40 Riservato. |
CLSCTX_RESERVED2 Valore: 0x80 Riservato. |
CLSCTX_RESERVED3 Valore: 0x100 Riservato. |
CLSCTX_RESERVED4 Valore: 0x200 Riservato. |
CLSCTX_NO_CODE_DOWNLOAD Valore: 0x400 Disabilita il download del codice dal servizio directory o da Internet. Questo flag non può essere impostato contemporaneamente a CLSCTX_ENABLE_CODE_DOWNLOAD. |
CLSCTX_RESERVED5 Valore: 0x800 Riservato. |
CLSCTX_NO_CUSTOM_MARSHAL Valore: 0x1000 Specificare se si vuole che l'attivazione non riesca se usa marshalling personalizzato. |
CLSCTX_ENABLE_CODE_DOWNLOAD Valore: 0x2000 Abilita il download del codice dal servizio directory o da Internet. Questo flag non può essere impostato contemporaneamente a CLSCTX_NO_CODE_DOWNLOAD. |
CLSCTX_NO_FAILURE_LOG Valore: 0x4000 Il CLSCTX_NO_FAILURE_LOG può essere usato per eseguire l'override della registrazione degli errori in CoCreateInstanceEx. Se viene creato ActivationFailureLoggingLevel, i valori seguenti possono determinare lo stato della registrazione eventi:
|
CLSCTX_DISABLE_AAA Valore: 0x8000 Disabilita le attivazioni AAA (activate-as-activator) solo per questa attivazione. Questo flag esegue l'override dell'impostazione del flag EOAC_DISABLE_AAA dall'enumerazione EOLE_AUTHENTICATION_CAPABILITIES. Questo flag non può essere impostato contemporaneamente all'CLSCTX_ENABLE_AAA. Qualsiasi attivazione in cui verrà avviato un processo server sotto l'identità del chiamante è noto come attivazione come attivazione come attivazione (AAA). La disabilitazione delle attivazioni di AAA consente a un'applicazione eseguita con un account con privilegi (ad esempio LocalSystem) di impedire l'uso dell'identità per avviare componenti non attendibili. Le applicazioni di libreria che usano le chiamate di attivazione devono sempre impostare questo flag durante queste chiamate. Ciò consente di impedire l'uso dell'applicazione di libreria in un attacco di sicurezza con privilegi di escalation. Questo è l'unico modo per disabilitare le attivazioni AAA in un'applicazione di libreria perché il flag EOAC_DISABLE_AAA dall'enumerazione EOLE_AUTHENTICATION_CAPABILITIES viene applicato solo al processo del server e non all'applicazione di libreria. Windows 2000: Questo flag non è supportato. |
CLSCTX_ENABLE_AAA Valore: 0x10000 Attiva le attivazioni AAA (activate-as-activator) solo per questa attivazione. Questo flag esegue l'override dell'impostazione del flag EOAC_DISABLE_AAA dall'enumerazione EOLE_AUTHENTICATION_CAPABILITIES. Questo flag non può essere impostato contemporaneamente a CLSCTX_DISABLE_AAA. Qualsiasi attivazione in cui verrà avviato un processo server sotto l'identità del chiamante è noto come attivazione come attivazione come attivazione (AAA). L'abilitazione di questo flag consente a un'applicazione di trasferire l'identità a un componente attivato. Windows 2000: Questo flag non è supportato. |
CLSCTX_FROM_DEFAULT_CONTEXT Valore: 0x20000 Avvia questa attivazione dal contesto predefinito dell'apartment corrente. |
CLSCTX_ACTIVATE_X86_SERVER Valore: 0x40000 |
CLSCTX_ACTIVATE_32_BIT_SERVER Attivare o connettersi a una versione a 32 bit del server; fail se non è registrato. |
CLSCTX_ACTIVATE_64_BIT_SERVER Valore: 0x80000 Attivare o connettersi a una versione a 64 bit del server; fail se non è registrato. |
CLSCTX_ENABLE_CLOAKING Valore: 0x100000 Quando viene specificato questo flag, COM usa il token di rappresentazione del thread, se presente, per la richiesta di attivazione effettuata dal thread. Quando questo flag non è specificato o se il thread non ha un token di rappresentazione, COM usa il token di processo del processo del thread per la richiesta di attivazione effettuata dal thread. Windows Vista o versioni successive: Questo flag è supportato. |
CLSCTX_APPCONTAINER Valore: 0x400000 Indica che l'attivazione è per un contenitore di app. Nota Questo flag è riservato per l'uso interno e non deve essere usato direttamente dal codice. |
CLSCTX_ACTIVATE_AAA_AS_IU Valore: 0x800000 Specificare questo flag per il comportamento di attivazione dell'utente interattivo per i server As-Activator. Un'app con nome fortemente denominato Medium IL Windows Store può usare questo flag per avviare un server COM "As Activator" senza un nome sicuro. È anche possibile usare questo flag per eseguire il binding a un'istanza in esecuzione del server COM avviato da un'applicazione desktop. Il client deve essere Medium IL, deve essere fortemente denominato, il che significa che ha un SysAppID nel token client, non può essere nella sessione 0 e deve avere lo stesso utente dell'ID sessione nel token client. Se il server è out-of-process e "As Activator", avvia il server con il token dell'utente sessione del token client. Questo token non sarà fortemente denominato. Se il server è out-of-process e RunAs "Interactive User", questo flag non ha alcun effetto. Se il server è out-of-process ed è qualsiasi altro tipo RunAs, l'attivazione ha esito negativo. Questo flag non ha alcun effetto per i server in-process. L'attivazione del computer non riesce quando usano questo flag. |
CLSCTX_RESERVED6 Valore: 0x1000000 |
CLSCTX_ACTIVATE_ARM32_SERVER Valore: 0x2000000 |
CLSCTX_PS_DLL Valore: 0x80000000 Usato per il caricamento di DLL proxy/Stub. Nota Questo flag è riservato per l'uso interno e non deve essere usato direttamente dal codice. |
Commenti
I valori dell'enumerazione CLSCTX vengono usati nelle chiamate di attivazione (CoCreateInstance, CoCreateInstanceEx, CoGetClassObject e così via) per indicare i contesti di esecuzione preferiti (in-process, local o remote) in cui deve essere eseguito un oggetto. Vengono usati anche nelle chiamate a CoRegisterClassObject per indicare il set di contesti di esecuzione in cui un oggetto classe deve essere reso disponibile per le richieste per costruire istanze (IClassFactory::CreateInstance).
Per indicare che più di un contesto è accettabile, è possibile combinare più valori con le ORS booleane. I contesti vengono tentati nell'ordine in cui sono elencati.
Dato un set di flag CLSCTX , il contesto di esecuzione da usare dipende dalla disponibilità di codici di classe registrati e altri parametri in base all'algoritmo seguente.
- Se la chiamata specifica una delle seguenti, CLSCTX_REMOTE_SERVER è implicita e viene aggiunta all'elenco di flag:
- Struttura COSERVERINFO esplicita che indica un computer diverso dal computer corrente.
- Nessuna struttura COSERVERINFO esplicita specificata, ma la classe specificata viene registrata con il valore del Registro di sistema RemoteServerName o ActivateAtStorage .
- Se il parametro COSERVERINFO esplicito indica il computer corrente, CLSCTX_REMOTE_SERVER viene rimosso se presente.
- Se i flag includono CLSCTX_REMOTE_SERVER e nessun parametro COSERVERINFO viene specificato e se la richiesta di attivazione indica uno stato persistente da cui inizializzare l'oggetto (con CoGetInstanceFromFile, CoGetInstanceFromIStorage o, per un moniker di file, in una chiamata a IMoniker::BindToObject) e la classe ha un TriggerAtStorageFromFile sottochiave o nessuna informazione del Registro di sistema di classi, la richiesta di attivazione e inizializzazione viene inoltrata al computer in cui risiede lo stato persistente. Fare riferimento alle funzioni di attivazione remota elencate nella sezione Vedere anche per informazioni dettagliate.
- Se i flag includono CLSCTX_INPROC_SERVER, il codice della classe nella DLL trovato nella chiave InprocServer32 della classe viene usato se questa chiave esiste. Il codice della classe verrà eseguito nello stesso processo del chiamante.
- Se i flag includono CLSCTX_INPROC_HANDLER, il codice della classe nella DLL trovato nella chiave InprocHandler32 della classe viene usato se questa chiave esiste. Il codice della classe verrà eseguito nello stesso processo del chiamante.
- Se i flag includono CLSCTX_LOCAL_SERVER, il codice della classe nel servizio trovato nella chiave LocalService della classe viene usato se questa chiave esiste. Se non viene specificato alcun servizio, ma viene specificato un exe nella stessa chiave, viene usato il codice di classe associato a tale exe. Il codice della classe (in entrambi i casi) verrà eseguito in un processo di servizio separato nello stesso computer del chiamante.
- Se il flag è impostato su CLSCTX_REMOTE_SERVER e un parametro COSERVERINFO aggiuntivo alla funzione specifica un determinato computer remoto, una richiesta di attivazione viene inoltrata a questo computer remoto con flag modificati per impostare su CLSCTX_LOCAL_SERVER. Il codice della classe verrà eseguito nel proprio processo in questo computer specifico, che deve essere diverso da quello del chiamante.
- Infine, se i flag includono CLSCTX_REMOTE_SERVER e non viene specificato alcun parametro COSERVERINFO e se viene specificato un nome computer sotto il valore RemoteServerName della classe, la richiesta di attivazione viene inoltrata a questo computer remoto con i flag modificati per essere impostati su CLSCTX_LOCAL_SERVER. Il codice della classe verrà eseguito nel proprio processo in questo computer specifico, che deve essere diverso da quello del chiamante.
CLSCTX_ACTIVATE_32_BIT_SERVER e CLSCTX_ACTIVATE_64_BIT_SERVER
Le versioni a 64 bit di Windows introducono due nuovi flag: CLSCTX_ACTIVATE_32_BIT_SERVER e CLSCTX_ACTIVATE_64_BIT_SERVER. In un computer a 64 bit, una versione a 32 bit e a 64 bit dello stesso server COM può coesistere. Quando un client richiede un'attivazione di un server out-of-process, questi flag CLSCTX consentono al client di specificare una versione a 32 bit o a 64 bit del server.In genere, un client non si preoccupa se usa una versione a 32 bit o a 64 bit del server. Tuttavia, se il server stesso carica un server in-process aggiuntivo, e il server in-process deve essere entrambi a 32 bit o a 64 bit. Si supponga, ad esempio, che il client voglia usare un server "A", che a sua volta carica un server in-process "B". Se è disponibile solo una versione a 32 bit del server "B", il client deve specificare la versione a 32 bit del server "A". Se è disponibile solo una versione a 64 bit del server "B", il client deve specificare la versione a 64 bit del server "A".
Un server può specificare le proprie preferenze di architettura tramite la chiave del Registro di sistema PreferredServerBitness, ma la preferenza del client, specificata tramite un flag CLSCTX_ACTIVATE_32_BIT_SERVER o CLSCTX_ACTIVATE_64_BIT_SERVER, eseguirà l'override della preferenza del server. Se il client non specifica una preferenza, verrà usata la preferenza del server.
Se né il client né il server specificano una preferenza, quindi:
- Se il computer che ospita il server esegue Windows Server 2003 con Service Pack 1 (SP1) o un sistema successivo, COM tenterà di corrispondere all'architettura del server all'architettura client. In altre parole, per un client a 32 bit, COM attiverà un server a 32 bit se disponibile; in caso contrario, attiverà una versione a 64 bit del server. Per un client a 64 bit, COM attiverà un server a 64 bit se disponibile; in caso contrario, attiverà un server a 32 bit.
- Se il computer che ospita il server esegue Windows XP o Windows Server 2003 senza SP1 o versioni successive installate, COM preferisce una versione a 64 bit del server se disponibile; in caso contrario, attiverà una versione a 32 bit del server.
La tabella seguente illustra i risultati delle varie combinazioni di architetture client e impostazioni client e architetture del server e impostazioni del server.
I flag CLSCTX_ACTIVATE_32_BIT_SERVER e CLSCTX_ACTIVATE_64_BIT_SERVER flusso attraverso i limiti del computer. Se il computer che ospita il server esegue Windows a 64 bit, il computer che ospita questi flag verrà rispettato; in caso contrario, verrà ignorata.
Client a 32 bit, nessun flag | Client a 64 bit, nessun flag | Client a 32 bit, flag a 32 bit¹ | Client a 32 bit, flag a 64 bit² | Client a 64 bit, flag a 32 bit¹ | Client a 64 bit, flag a 64 bit² | |
---|---|---|---|---|---|---|
Server a 32 bit, corrispondenza del valore del Registro di sistema client³ | Server a 32 bit | Vedere ⁸ | Server a 32 bit | Vedere ⁸ | Server a 32 bit | Vedere ⁸ |
Server a 32 bit, valore del Registro di sistema a 32 bit⁴ | Server a 32 bit | Server a 32 bit | Server a 32 bit | Vedere ⁸ | Server a 32 bit | Vedere ⁸ |
Server a 32 bit, valore del Registro di sistema a 64 bit⁵ | Vedere ⁸ | Vedere ⁸ | Server a 32 bit | Vedere ⁸ | Server a 32 bit | Vedere ⁸ |
Server a 32 bit, nessun valore del Registro di sistema⁶ | Server a 32 bit | 64/32⁹ | Server a 32 bit | Vedere ⁸ | Server a 32 bit | Vedere ⁸ |
Server a 32 bit, nessun valore del Registro di sistema (prima di Windows Server 2003 con SP1)⁷ | 64/32⁹ | 64/32⁹ | Server a 32 bit | Vedere ⁸ | Server a 32 bit | Vedere ⁸ |
Server a 64 bit, corrispondenza del valore del Registro di sistema client³ | Vedere ⁸ | Server a 64 bit | Vedere ⁸ | Server a 64 bit | Vedere ⁸ | Server a 64 bit |
Server a 64 bit, valore del Registro di sistema a 32 bit⁴ | Vedere ⁸ | Vedere ⁸ | Vedere ⁸ | Server a 64 bit | Vedere ⁸ | Server a 64 bit |
Server a 64 bit, valore del Registro di sistema a 64 bit⁵ | Server a 64 bit | Server a 64 bit | Vedere ⁸ | Server a 64 bit | Vedere ⁸ | Server a 64 bit |
Server a 64 bit, nessun valore del Registro di sistema⁶ | 32/64¹¹ | Server a 64 bit | Vedere ⁸ | Server a 64 bit | Vedere ⁸ | Server a 64 bit |
Server a 64 bit, nessun valore del Registro di sistema (prima di Windows Server 2003 con SP1)⁷ | Server a 64 bit | Server a 64 bit | Vedere ⁸ | Server a 64 bit | Vedere ⁸ | Server a 64 bit |
PreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitness PreferredServerBitnessPreferredServerBitness
Requisiti
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Intestazione | wtypesbase.h |
Vedi anche
Creazione di un oggetto tramite un oggetto classe
IClassActivator::GetClassObject