Enumerazione CLSCTX (wtypesbase.h)
Valori utilizzati nelle chiamate di attivazione per indicare i contesti di esecuzione in cui deve essere eseguito 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 di costruzione di 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 che crea e gestisce oggetti di questa classe è una DLL eseguita nello stesso processo del chiamante della funzione che specifica il contesto della classe. |
CLSCTX_INPROC_HANDLER Valore: 0x2 Il codice che gestisce gli oggetti di questa classe è un gestore in-process. Si tratta di una DLL eseguita nel processo client e implementa strutture lato client di questa classe quando si accede in remoto alle istanze della classe. |
CLSCTX_LOCAL_SERVER Valore: 0x4 Il codice EXE che crea e gestisce gli oggetti di questa classe viene eseguito nello stesso computer, ma viene caricato in uno spazio di processo separato. |
CLSCTX_INPROC_SERVER16 Valore: 0x8 Obsoleto. |
CLSCTX_REMOTE_SERVER Valore: 0x10 Contesto remoto. Il codice LocalServer32 o LocalService che crea e gestisce oggetti di questa classe viene eseguito in un computer diverso. |
CLSCTX_INPROC_HANDLER16 Valore: 0x20 Obsoleto. |
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 desidera che l'attivazione non riesca se usa il 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 degli eventi:
|
CLSCTX_DISABLE_AAA Valore: 0x8000 Disabilita le attivazioni attivate come attivatore (AAA) solo per questa attivazione. Questo flag sostituisce l'impostazione del flag EOAC_DISABLE_AAA dall'enumerazione EOLE_AUTHENTICATION_CAPABILITIES. Questo flag non può essere impostato contemporaneamente a CLSCTX_ENABLE_AAA. Qualsiasi attivazione in cui viene avviato un processo server con l'identità del chiamante è noto come attivazione come attivatore (AAA). La disabilitazione delle attivazioni 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 tali chiamate. Ciò consente di impedire che l'applicazione di libreria venga usata 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 server e non all'applicazione di libreria. Windows 2000: Questo flag non è supportato. |
CLSCTX_ENABLE_AAA Valore: 0x10000 Abilita le attivazioni attivate come attivatore (AAA) solo per questa attivazione. Questo flag sostituisce l'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 viene avviato un processo server con l'identità del chiamante è noto come attivazione come attivatore (AAA). L'abilitazione di questo flag consente a un'applicazione di trasferire la propria identità a un componente attivato. Windows 2000: Questo flag non è supportato. |
CLSCTX_FROM_DEFAULT_CONTEXT Valore: 0x20000 Iniziare l'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; ha esito negativo se non è registrato. |
CLSCTX_ACTIVATE_64_BIT_SERVER Valore: 0x80000 Attivare o connettersi a una versione a 64 bit del server; ha esito negativo se non è registrato. |
CLSCTX_ENABLE_CLOAKING Valore: 0x100000 Quando si specifica questo flag, COM usa il token di rappresentazione del thread, se presente, per la richiesta di attivazione effettuata dal thread. Quando questo flag non viene specificato o se il thread non dispone di 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 versione successiva: 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 utente interattivo per i server As-Activator. Un'app di Windows Store con nome sicuro può usare questo flag per avviare un server COM "As Activator" senza un nome sicuro. È anche possibile usare questo flag per eseguire l'associazione 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'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 verrà denominato con nome sicuro. 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. Le attivazioni fuori computer hanno esito negativo 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. |
Osservazioni
I valori dell'enumerazione CLSCTX
Per indicare che più di un contesto è accettabile, è possibile combinare più valori con le richieste pull booleane. I contesti vengono provati nell'ordine in cui sono elencati.
Dato un set di flag di CLSCTX, il contesto di esecuzione da usare dipende dalla disponibilità dei codici di classe registrati e di altri parametri in base all'algoritmo seguente.
- Se la chiamata specifica una delle opzioni 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 RemoteServerName o ActivateAtStorage valore del Registro di sistema.
- Struttura
- Se il parametro COSERVER INFO esplicito indica il computer corrente, CLSCTX_REMOTE_SERVER viene rimosso se presente.
- Se i flag includono CLSCTX_REMOTE_SERVER e non viene specificato alcun parametro COSERVERINFO e se la richiesta di attivazione indica uno stato permanente da cui inizializzare l'oggetto (con CoGetInstanceFromFile, CoGetInstanceFromIStorageo per un moniker di file, in una chiamata a IMoniker::BindToObject) e la classe ha un ActivateAtStorage sottochiave o nessuna informazione del Registro di sistema delle classi, la richiesta di attivazione e inizializzazione viene inoltrata al computer in cui risiede lo stato permanente. Per informazioni dettagliate, vedere le funzioni di attivazione remota elencate nella sezione Vedere anche .
- Se i flag includono CLSCTX_INPROC_SERVER, viene usato il codice di classe nella DLL presente nella chiave di InprocServer32 della classe. Il codice della classe verrà eseguito nello stesso processo del chiamante.
- Se i flag includono CLSCTX_INPROC_HANDLER, viene usato il codice di classe nella DLL presente nella chiave InprocHandler32 della classe. Il codice della classe verrà eseguito nello stesso processo del chiamante.
- Se i flag includono CLSCTX_LOCAL_SERVER, il codice della classe nel servizio presente nel chiave LocalService della classe viene usato se questa chiave esiste. Se non viene specificato alcun servizio, ma viene specificato un file EXE con la stessa chiave, viene usato il codice di classe associato a tale exe. Il codice di 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 altro parametro COSERVERINFO 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 di 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 in RemoteServerName valore denominato, la richiesta di attivazione viene inoltrata a questo computer remoto con i flag modificati per essere impostati su CLSCTX_LOCAL_SERVER. Il codice di 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, il server e il server in-process devono 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 PreferredServerBitness chiave del Registro di sistema, ma la preferenza del client, specificata tramite un flag CLSCTX_ACTIVATE_32_BIT_SERVER o CLSCTX_ACTIVATE_64_BIT_SERVER, sostituirà le preferenze 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, procedere come illustrato di seguito:
- Se il computer che ospita il server esegue Windows Server 2003 con Service Pack 1 (SP1) o un sistema successivo, COM tenterà di associare l'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 versione successiva, 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 server e impostazioni server.
I flag CLSCTX_ACTIVATE_32_BIT_SERVER e CLSCTX_ACTIVATE_64_BIT_SERVER fluire attraverso i limiti del computer. Se il computer che ospita il server esegue Windows a 64 bit, rispetta questi flag; in caso contrario, li ignorerà.
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 |
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows 2000 Professional [solo app desktop] |
server minimo supportato | Windows 2000 Server [solo app desktop] |
intestazione |
wtypesbase.h |
Vedere anche
Creazione di un oggetto tramite un oggetto classe
IClassActivator::GetClassObject