Compartir a través de


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 un archivo DLL que se ejecuta en el mismo proceso que el autor de la llamada de la función que especifica el contexto de clase.
CLSCTX_INPROC_HANDLER
Valor: 0x2
El código que administra los 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 EXE que crea y administra objetos de esta clase se ejecuta en la misma máquina, pero se carga en un espacio de proceso independiente.
CLSCTX_INPROC_SERVER16
Valor: 0x8
Obsoleto.
CLSCTX_REMOTE_SERVER
Valor: 0x10
Un contexto remoto. El localServer32 o código 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 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 del cliente especificado. 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 no establecer el valor en 2. Si el registro de eventos está deshabilitado, es más difícil diagnosticar problemas.

CLSCTX_DISABLE_AAA
Valor: 0x8000
Deshabilita las activaciones de activación como activador (AAA) solo 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 en la identidad del autor de la llamada se conoce como activación como activador (AAA). Deshabilitar las activaciones AAA permite que una aplicación que se ejecute en 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 escalación. 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
Habilita las activaciones de activación como activador (AAA) solo 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 en la identidad del autor de la llamada se conoce como activación como activador (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 desde el 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: Se admite esta marca.
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 usuario interactivo 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 que inicia 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 "Como activador", 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 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 de proxy o código auxiliar.

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 se admite más de un contexto, puede combinar varios valores con OID booleanas. Los contextos se prueban en el orden en que se muestran.

Dado un conjunto de marcas de 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. Una estructura COSERVERINFO explícita que indica una máquina diferente del equipo actual.
    2. No se ha especificado ninguna estructura COSERVERINFO explícita, pero la clase especificada se registra con el RemoteServerName o valor del Registro ActivateAtStorage.
    El segundo caso permite que las aplicaciones escritas antes de la versión de COM distribuida sean la configuración de clases para que las aplicaciones cliente puedan usar la activación remota antes de DCOM y la marca de CLSCTX_REMOTE_SERVER. Los casos en los que no habría ninguna estructura explícita COSERVERINFO 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 una ActivateAtStorage subclave o ninguna información del Registro de clases, La solicitud para activar e inicializar se reenvía al equipo donde reside el estado persistente. (Consulte las funciones de activación remota que aparecen en la sección Ver 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 de la clase InprocServer32 clave si esta clave existe. El código de clase se ejecutará dentro del 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 de la clase InprocHandler32 clave si esta clave existe. El código de clase se ejecutará dentro del 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 localService de la clase clave 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 de COSERVERINFO adicional a la función especifica un equipo remoto determinado, se reenvía una solicitud para activar 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 especifica un nombre de equipo en el RemoteServerName de la clase valor con nombre, 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, estos marcas de CLSCTX permiten al cliente especificar una versión de 32 o 64 bits del servidor.

Normalmente, a un cliente no le importará si usa una versión de 32 o de 64 bits del servidor. Sin embargo, si el propio servidor carga un servidor en proceso adicional, 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 del PreferredServerBitness clave del Registro, pero la preferencia del cliente, especificada a través de una marca de 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. En otras palabras, 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 preferirá 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 de 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 diversas 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, flag² de 64 bits
Servidor de 32 bits, coincidencia con el valor del Registro de cliente³ Servidor de 32 bits Ver ⁸ Servidor de 32 bits Ver ⁸ Servidor de 32 bits Ver ⁸
Servidor de 32 bits, valor del Registro de 32 bits⁴ Servidor de 32 bits Servidor de 32 bits Servidor de 32 bits Ver ⁸ Servidor de 32 bits Ver ⁸
Servidor de 32 bits, valor del Registro de 64 bits⁵ Ver ⁸ Ver ⁸ Servidor de 32 bits Ver ⁸ Servidor de 32 bits Ver ⁸
Servidor de 32 bits, sin valor del Registro⁶ Servidor de 32 bits 32/64⁹ Servidor de 32 bits Ver ⁸ Servidor de 32 bits Ver ⁸
Servidor de 32 bits, sin valor del Registro (antes de Windows Server 2003 con SP1)⁷ 32/64⁹ 32/64⁹ Servidor de 32 bits Ver ⁸ Servidor de 32 bits Ver ⁸
Servidor de 64 bits, coincidencia con el valor del Registro de cliente³ Ver ⁸ Servidor de 64 bits Ver ⁸ Servidor de 64 bits Ver ⁸ Servidor de 64 bits
Servidor de 64 bits, valor del Registro de 32 bits⁴ Ver ⁸ Ver ⁸ Ver ⁸ Servidor de 64 bits Ver ⁸ Servidor de 64 bits
Servidor de 64 bits, valor del Registro de 64 bits⁵ Servidor de 64 bits Servidor de 64 bits Ver ⁸ Servidor de 64 bits Ver ⁸ Servidor de 64 bits
Servidor de 64 bits, sin valor del Registro⁶ 32/64¹¹ Servidor de 64 bits Ver ⁸ Servidor de 64 bits Ver ⁸ 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 Ver ⁸ Servidor de 64 bits Ver ⁸ Servidor de 64 bits

Requisitos

Requisito Valor
cliente mínimo admitido Windows 2000 Professional [solo aplicaciones de escritorio]
servidor mínimo admitido Windows 2000 Server [solo aplicaciones de escritorio]
encabezado de wtypesbase.h

Consulte también

BIND_OPTS2

COSERVERINFO

CoCreateInstance

CoCreateInstanceEx

CoGetClassObject de

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