Condividi tramite


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:


  • 0 = Registrazione discrezionale. Log per impostazione predefinita, ma i client possono eseguire l'override specificando CLSCTX_NO_FAILURE_LOG in CoCreateInstanceEx.

  • 1 = Registra sempre tutti gli errori indipendentemente dal client specificato.

  • 2 = Non registrare mai errori indipendentemente dal client specificato. Se manca la voce del Registro di sistema, il valore predefinito è 0. Se è necessario controllare le applicazioni dei clienti, è consigliabile impostare questo valore su 0 e scrivere il codice client per eseguire l'override degli errori. È consigliabile non impostare il valore su 2. Se la registrazione eventi è disabilitata, è più difficile diagnosticare i problemi.

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 vengono usati nelle chiamate di attivazione (CoCreateInstance, CoCreateInstanceEx, CoGetClassObjecte così via) per indicare i contesti di esecuzione preferiti (in-process, local o remote) in cui deve essere eseguito un oggetto. Vengono usate 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 (IClassFactory::CreateInstance).

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.

  1. Se la chiamata specifica una delle opzioni seguenti, CLSCTX_REMOTE_SERVER è implicita e viene aggiunta all'elenco di flag:
    1. Struttura COSERVERINFO esplicita che indica un computer diverso dal computer corrente.
    2. Nessuna struttura COSERVERINFO esplicita specificata, ma la classe specificata viene registrata con il RemoteServerName o ActivateAtStorage valore del Registro di sistema.
    Il secondo caso consente alle applicazioni scritte prima del rilascio di COM distribuito di essere la configurazione delle classi per l'attivazione remota da usare dalle applicazioni client disponibili prima di DCOM e il flag CLSCTX_REMOTE_SERVER. I casi in cui non esisterebbe alcuna struttura COSERVER INFO esplicita quando il valore viene specificato come NULL o quando non è uno dei parametri della funzione ( come nelle chiamate a CoCreateInstance e CoGetClassObject).
  2. Se il parametro COSERVER INFO esplicito indica il computer corrente, CLSCTX_REMOTE_SERVER viene rimosso se presente.
Il resto dell'elaborazione procede esaminando i valori nella sequenza seguente:
  1. 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 .
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
Se un'enumerazione CLSCTX include sia i flag CLSCTX_ACTIVATE_32_BIT_SERVER che i flag CLSCTX_ACTIVATE_64_BIT_SERVER impostati, l'attivazione non è valida e l'attivazione restituirà E_INVALIDARG.

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

BIND_OPTS2

COSERVERINFO

CoCreateInstance

CoCreateInstanceEx

CoGetClassObject

CoGetInstanceFromFile

CoGetInstanceFromIStorage

CoRegisterClassObject

Creazione di un oggetto tramite un oggetto classe

IClassActivator::GetClassObject

l'individuazione di un oggetto remoto

registrazione di un server EXE in esecuzione