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:
|
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.
- Si la llamada especifica una de las siguientes opciones, CLSCTX_REMOTE_SERVER está implícita y se agrega a la lista de marcas:
- Estructura COSERVERINFO explícita que indica una máquina diferente del equipo actual.
- No se especificó ninguna estructura COSERVERINFO explícita, pero la clase especificada se registra con el valor del Registro RemoteServerName o 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 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).
- 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.
- 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.
- 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.
- 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.
- 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.
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
Crear un objeto a través de un objeto de clase