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:
|
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
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.
- Si la llamada especifica una de las siguientes opciones, CLSCTX_REMOTE_SERVER está implícita y se agrega a la lista de marcas:
- Una estructura COSERVERINFO explícita que indica una máquina diferente del equipo actual.
- No se ha especificado ninguna estructura
COSERVERINFO explícita, pero la clase especificada se registra con el RemoteServerName ovalor del Registro ActivateAtStorage .
- Si el parámetro COSERVERINFO explícito indica el equipo actual, CLSCTX_REMOTE_SERVER se quita si está presente.
- 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).
- 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.
- 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.
- 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.
- 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.
- 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.
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
CoGetClassObject de
crear un objeto a través de un objeto de clase