Enumeración CLSCTX (wtypesbase.h)

Valores que se usan en las llamadas de activación para indicar los contextos de ejecución en los que se va a ejecutar un objeto. Estos valores también se usan en llamadas a CoRegisterClassObject para indicar el conjunto de contextos de ejecución en los que se va a poner un objeto de clase a disposición de las solicitudes para construir instancias.

Sintaxis

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;

Constantes

 
CLSCTX_INPROC_SERVER
Valor: 0x1
El código que crea y administra objetos de esta clase es una DLL que se ejecuta en el mismo proceso que el llamador de la función que especifica el contexto de clase.
CLSCTX_INPROC_HANDLER
Valor: 0x2
El código que administra objetos de esta clase es un controlador en proceso. Se trata de un archivo DLL que se ejecuta en el proceso de cliente e implementa estructuras del lado cliente de esta clase cuando se accede a instancias de la clase de forma remota.
CLSCTX_LOCAL_SERVER
Valor: 0x4
El código del EXE que crea y administra objetos de esta clase se ejecuta en el mismo equipo pero se carga en un espacio de proceso independiente.
CLSCTX_INPROC_SERVER16
Valor: 0x8
Obsoleto.
CLSCTX_REMOTE_SERVER
Valor: 0x10
Un contexto remoto. El código LocalServer32 o LocalService que crea y administra objetos de esta clase se ejecuta en un equipo diferente.
CLSCTX_INPROC_HANDLER16
Valor: 0x20
Obsoleto.
CLSCTX_RESERVED1
Valor: 0x40
Reservado.
CLSCTX_RESERVED2
Valor: 0x80
Reservado.
CLSCTX_RESERVED3
Valor: 0x100
Reservado.
CLSCTX_RESERVED4
Valor: 0x200
Reservado.
CLSCTX_NO_CODE_DOWNLOAD
Valor: 0x400
Deshabilita la descarga de código desde el servicio de directorio o Internet. Esta marca no se puede establecer al mismo tiempo que CLSCTX_ENABLE_CODE_DOWNLOAD.
CLSCTX_RESERVED5
Valor: 0x800
Reservado.
CLSCTX_NO_CUSTOM_MARSHAL
Valor: 0x1000
Especifique si desea que se produzca un error en la activación si usa la serialización personalizada.
CLSCTX_ENABLE_CODE_DOWNLOAD
Valor: 0x2000
Habilita la descarga de código desde el servicio de directorio o Internet. Esta marca no se puede establecer al mismo tiempo que CLSCTX_NO_CODE_DOWNLOAD.
CLSCTX_NO_FAILURE_LOG
Valor: 0x4000
El CLSCTX_NO_FAILURE_LOG se puede usar para invalidar el registro de errores en CoCreateInstanceEx.

Si se crea ActivationFailureLoggingLevel, los valores siguientes pueden determinar el estado del registro de eventos:


  • 0 = Registro discrecional. Registre de forma predeterminada, pero los clientes pueden invalidar especificando CLSCTX_NO_FAILURE_LOG en CoCreateInstanceEx.

  • 1 = Registre siempre todos los errores independientemente de lo especificado por el cliente.

  • 2 = Nunca registre ningún error independientemente de lo especificado por el cliente. Si falta la entrada del Registro, el valor predeterminado es 0. Si necesita controlar las aplicaciones de cliente, se recomienda establecer este valor en 0 y escribir el código de cliente para invalidar los errores. Se recomienda encarecidamente que no establezca el valor en 2. Si el registro de eventos está deshabilitado, es más difícil diagnosticar problemas.

CLSCTX_DISABLE_AAA
Valor: 0x8000
Sólo deshabilita las activaciones "activar como activador" (AAA) para esta activación. Esta marca invalida la configuración de la marca EOAC_DISABLE_AAA de la enumeración EOLE_AUTHENTICATION_CAPABILITIES. Esta marca no se puede establecer al mismo tiempo que CLSCTX_ENABLE_AAA. Cualquier activación en la que se iniciaría un proceso de servidor bajo la identidad del autor de la llamada se conoce como activación activadora (AAA). Deshabilitar las activaciones AAA permite que una aplicación que se ejecute con una cuenta con privilegios (como LocalSystem) ayude a evitar que su identidad se use para iniciar componentes que no son de confianza. Las aplicaciones de biblioteca que usan llamadas de activación siempre deben establecer esta marca durante esas llamadas. Esto ayuda a evitar que la aplicación de biblioteca se use en un ataque de seguridad con privilegios de escalado. Esta es la única manera de deshabilitar las activaciones AAA en una aplicación de biblioteca porque la marca EOAC_DISABLE_AAA de la enumeración EOLE_AUTHENTICATION_CAPABILITIES solo se aplica al proceso de servidor y no a la aplicación de biblioteca.

Windows 2000: Esta marca no se admite.
CLSCTX_ENABLE_AAA
Valor: 0x10000
Sólo habilita las activaciones "activar como activador" (AAA) para esta activación. Esta marca invalida la configuración de la marca EOAC_DISABLE_AAA de la enumeración EOLE_AUTHENTICATION_CAPABILITIES. Esta marca no se puede establecer al mismo tiempo que CLSCTX_DISABLE_AAA. Cualquier activación en la que se iniciaría un proceso de servidor bajo la identidad del autor de la llamada se conoce como activación activadora (AAA). Al habilitar esta marca, una aplicación puede transferir su identidad a un componente activado.

Windows 2000: Esta marca no se admite.
CLSCTX_FROM_DEFAULT_CONTEXT
Valor: 0x20000
Comience esta activación a partir del contexto predeterminado del apartamento actual.
CLSCTX_ACTIVATE_X86_SERVER
Valor: 0x40000
CLSCTX_ACTIVATE_32_BIT_SERVER
Activar o conectarse a una versión de 32 bits del servidor; produce un error si no se registra uno.
CLSCTX_ACTIVATE_64_BIT_SERVER
Valor: 0x80000
Activar o conectarse a una versión de 64 bits del servidor; produce un error si no se registra uno.
CLSCTX_ENABLE_CLOAKING
Valor: 0x100000
Cuando se especifica esta marca, COM usa el token de suplantación del subproceso, si hay uno presente, para la solicitud de activación realizada por el subproceso. Cuando no se especifica esta marca o si el subproceso no tiene un token de suplantación, COM usa el token de proceso del proceso del subproceso para la solicitud de activación realizada por el subproceso.


Windows Vista o posterior: Esta marca es compatible.
CLSCTX_APPCONTAINER
Valor: 0x400000
Indica que la activación es para un contenedor de aplicaciones.


Nota Esta marca está reservada para uso interno y no está pensada para usarse directamente desde el código.

 
CLSCTX_ACTIVATE_AAA_AS_IU
Valor: 0x800000
Especifique esta marca para el comportamiento de activación de usuarios interactivos para As-Activator servidores. Una aplicación de la Tienda Windows de IL mediana con nombre seguro puede usar esta marca para iniciar un servidor COM "As Activator" sin un nombre seguro. Además, puede usar esta marca para enlazar a una instancia en ejecución del servidor COM iniciado por una aplicación de escritorio.

El cliente debe ser IL medio, debe tener un nombre seguro, lo que significa que tiene un SysAppID en el token de cliente, no puede estar en la sesión 0 y debe tener el mismo usuario que el usuario del identificador de sesión en el token de cliente.

Si el servidor está fuera de proceso y "As Activator", inicia el servidor con el token del usuario de sesión del token de cliente. Este token no se denominará fuertemente.

Si el servidor está fuera de proceso y RunAs "Usuario interactivo", esta marca no tiene ningún efecto.

Si el servidor está fuera de proceso y es cualquier otro tipo de RunAs, se produce un error en la activación.

Esta marca no tiene ningún efecto para los servidores en proceso.

Se produce un error en las activaciones fuera de la máquina cuando usan esta marca.
CLSCTX_RESERVED6
Valor: 0x1000000
CLSCTX_ACTIVATE_ARM32_SERVER
Valor: 0x2000000
CLSCTX_PS_DLL
Valor: 0x80000000
Se usa para cargar archivos DLL proxy/Stub.


Nota Esta marca está reservada para uso interno y no está pensada para usarse directamente desde el código.

 

Observaciones

Los valores de la enumeración CLSCTX se usan en llamadas de activación (CoCreateInstance, CoCreateInstanceEx, CoGetClassObject, etc.) para indicar los contextos de ejecución preferidos (en proceso, local o remoto) en los que se va a ejecutar un objeto. También se usan en llamadas a CoRegisterClassObject para indicar el conjunto de contextos de ejecución en los que se va a poner un objeto de clase a disposición de las solicitudes para construir instancias (IClassFactory::CreateInstance).

Para indicar que más de un contexto es aceptable, puede combinar varios valores con OID booleanas. Los contextos se prueban en el orden en que se muestran.

Dado un conjunto de marcas CLSCTX , el contexto de ejecución que se va a usar depende de la disponibilidad de los códigos de clase registrados y de otros parámetros según el algoritmo siguiente.

  1. Si la llamada especifica una de las siguientes opciones, CLSCTX_REMOTE_SERVER está implícita y se agrega a la lista de marcas:
    1. Estructura COSERVERINFO explícita que indica una máquina diferente del equipo actual.
    2. No se especificó ninguna estructura COSERVERINFO explícita, pero la clase especificada se registra con el valor del Registro RemoteServerName o ActivateAtStorage .
    El segundo caso permite que las aplicaciones escritas antes del lanzamiento de COM distribuido sean la configuración de clases para que las aplicaciones cliente puedan usar la activación remota antes de DCOM y la marca CLSCTX_REMOTE_SERVER. Los casos en los que no habría ninguna estructura COSERVERINFO explícita son cuando el valor se especifica como NULL o cuando no es uno de los parámetros de función (como en llamadas a CoCreateInstance y CoGetClassObject).
  2. Si el parámetro COSERVERINFO explícito indica el equipo actual, CLSCTX_REMOTE_SERVER se quita si está presente.
El resto del procesamiento continúa examinando los valores de la secuencia siguiente:
  1. Si las marcas incluyen CLSCTX_REMOTE_SERVER y no se especifica ningún parámetro COSERVERINFO y si la solicitud de activación indica un estado persistente desde el que inicializar el objeto (con CoGetInstanceFromFile, CoGetInstanceFromIStorage o, para un moniker de archivo, en una llamada a IMoniker::BindToObject) y la clase tiene activateAtStorage subclave o ninguna información del Registro de clase, la solicitud de activación e inicialización se reenvía al equipo donde reside el estado persistente. (Consulte las funciones de activación remota que aparecen en la sección Vea también para obtener más información).
  2. Si las marcas incluyen CLSCTX_INPROC_SERVER, se usa el código de clase en el archivo DLL que se encuentra en la clave InprocServer32 de la clase si existe esta clave. El código de clase se ejecutará en el mismo proceso que el autor de la llamada.
  3. Si las marcas incluyen CLSCTX_INPROC_HANDLER, se usa el código de clase en el archivo DLL que se encuentra en la clave InprocHandler32 de la clase si esta clave existe. El código de clase se ejecutará en el mismo proceso que el autor de la llamada.
  4. Si las marcas incluyen CLSCTX_LOCAL_SERVER, se usa el código de clase del servicio que se encuentra en la clave LocalService de la clase si existe esta clave. Si no se especifica ningún servicio, pero se especifica un EXE con esa misma clave, se usa el código de clase asociado a ese EXE. El código de clase (en cualquier caso) se ejecutará en un proceso de servicio independiente en el mismo equipo que el autor de la llamada.
  5. Si la marca se establece en CLSCTX_REMOTE_SERVER y un parámetro COSERVERINFO adicional a la función especifica un equipo remoto determinado, se reenvía una solicitud de activación a este equipo remoto con marcas modificadas para establecer en CLSCTX_LOCAL_SERVER. El código de clase se ejecutará en su propio proceso en este equipo específico, que debe ser diferente del del autor de la llamada.
  6. Por último, si las marcas incluyen CLSCTX_REMOTE_SERVER y no se especifica ningún parámetro COSERVERINFO y si se asigna un nombre de equipo bajo el valor con nombre RemoteServerName de la clase, la solicitud para activar se reenvía a este equipo remoto con las marcas modificadas para establecerse en CLSCTX_LOCAL_SERVER. El código de clase se ejecutará en su propio proceso en este equipo específico, que debe ser diferente del del autor de la llamada.

CLSCTX_ACTIVATE_32_BIT_SERVER y CLSCTX_ACTIVATE_64_BIT_SERVER

Las versiones de 64 bits de Windows presentan dos marcas nuevas: CLSCTX_ACTIVATE_32_BIT_SERVER y CLSCTX_ACTIVATE_64_BIT_SERVER. En un equipo de 64 bits, puede coexistir una versión de 32 y 64 bits del mismo servidor COM. Cuando un cliente solicita una activación de un servidor fuera de proceso, estas marcas CLSCTX permiten al cliente especificar una versión de 32 o 64 bits del servidor.

Normalmente, a un cliente no le importa si usa una versión de 32 bits o de 64 bits del servidor. Sin embargo, si el propio servidor carga un servidor adicional en proceso, este y el servidor en proceso deben ser de 32 o 64 bits. Por ejemplo, supongamos que el cliente quiere usar un servidor "A", que a su vez carga un servidor en proceso "B". Si solo hay disponible una versión de 32 bits del servidor "B", el cliente debe especificar la versión de 32 bits del servidor "A". Si solo hay disponible una versión de 64 bits del servidor "B", el cliente debe especificar la versión de 64 bits del servidor "A".

Un servidor puede especificar su propia preferencia de arquitectura a través de la clave del Registro PreferredServerBitness, pero la preferencia del cliente, especificada a través de una marca CLSCTX_ACTIVATE_32_BIT_SERVER o CLSCTX_ACTIVATE_64_BIT_SERVER, invalidará la preferencia del servidor. Si el cliente no especifica una preferencia, se usará la preferencia del servidor.

Si ni el cliente ni el servidor especifican una preferencia, haga lo siguiente:

  • Si el equipo que hospeda el servidor ejecuta Windows Server 2003 con Service Pack 1 (SP1) o un sistema posterior, COM intentará hacer coincidir la arquitectura del servidor con la arquitectura de cliente. Es decir, para un cliente de 32 bits, COM activará un servidor de 32 bits si está disponible; de lo contrario, activará una versión de 64 bits del servidor. Para un cliente de 64 bits, COM activará un servidor de 64 bits si está disponible; de lo contrario, activará un servidor de 32 bits.
  • Si el equipo que hospeda el servidor ejecuta Windows XP o Windows Server 2003 sin SP1 o posterior instalado, COM prefiere una versión de 64 bits del servidor si está disponible; de lo contrario, activará una versión de 32 bits del servidor.
Si una enumeración CLSCTX tiene las marcas CLSCTX_ACTIVATE_32_BIT_SERVER y CLSCTX_ACTIVATE_64_BIT_SERVER establecidas, no es válida y la activación devolverá E_INVALIDARG.

En la tabla siguiente se muestran los resultados de las distintas combinaciones de arquitecturas de cliente y configuración de cliente y arquitecturas de servidor y configuración del servidor.

Las marcas CLSCTX_ACTIVATE_32_BIT_SERVER y CLSCTX_ACTIVATE_64_BIT_SERVER fluyen a través de los límites del equipo. Si el equipo que hospeda el servidor ejecuta windows de 64 bits, respetará estas marcas; de lo contrario, los omitirá.

Cliente de 32 bits, sin marca Cliente de 64 bits, sin marca Cliente de 32 bits, marca de 32 bits Cliente de 32 bits, marca de 64 bits² Cliente de 64 bits, marca de 32 bits Cliente de 64 bits, marca de 64 bits²
Servidor de 32 bits, coincidencia con el valor del Registro de cliente³ Servidor de 32 bits Véase ⁸ Servidor de 32 bits Véase ⁸ Servidor de 32 bits Véase ⁸
Servidor de 32 bits, valor del Registro de 32 bits⁴ Servidor de 32 bits Servidor de 32 bits Servidor de 32 bits Véase ⁸ Servidor de 32 bits Véase ⁸
Servidor de 32 bits, valor del Registro de 64 bits⁵ Véase ⁸ Véase ⁸ Servidor de 32 bits Véase ⁸ Servidor de 32 bits Véase ⁸
Servidor de 32 bits, sin valor del Registro⁶ Servidor de 32 bits 32/64⁹ Servidor de 32 bits Véase ⁸ Servidor de 32 bits Véase ⁸
Servidor de 32 bits, sin valor del Registro (antes de Windows Server 2003 con SP1)⁷ 32/64⁹ 32/64⁹ Servidor de 32 bits Véase ⁸ Servidor de 32 bits Véase ⁸
Servidor de 64 bits, coincidencia con el valor del Registro de cliente³ Véase ⁸ Servidor de 64 bits Véase ⁸ Servidor de 64 bits Véase ⁸ Servidor de 64 bits
Servidor de 64 bits, valor del Registro de 32 bits⁴ Véase ⁸ Véase ⁸ Véase ⁸ Servidor de 64 bits Véase ⁸ Servidor de 64 bits
Servidor de 64 bits, valor del Registro de 64 bits⁵ Servidor de 64 bits Servidor de 64 bits Véase ⁸ Servidor de 64 bits Véase ⁸ Servidor de 64 bits
Servidor de 64 bits, sin valor del Registro⁶ 32/64%) Servidor de 64 bits Véase ⁸ Servidor de 64 bits Véase ⁸ Servidor de 64 bits
Servidor de 64 bits, sin valor del Registro (antes de Windows Server 2003 con SP1)⁷ Servidor de 64 bits Servidor de 64 bits Véase ⁸ Servidor de 64 bits Véase ⁸ Servidor de 64 bits
 

PreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitness

Requisitos

   
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado wtypesbase.h

Consulte también

BIND_OPTS2

COSERVERINFO

Cocreateinstance

CoCreateInstanceEx

CoGetClassObject

CoGetInstanceFromFile

CoGetInstanceFromIStorage

CoRegisterClassObject

Crear un objeto a través de un objeto de clase

IClassActivator::GetClassObject

Buscar un objeto remoto

Registrar un servidor EXE en ejecución