Перечисление CLSCTX (wtypesbase.h)
Значения, используемые в вызовах активации для указания контекстов выполнения, в которых должен выполняться объект. Эти значения также используются в вызовах CoRegisterClassObject для указания набора контекстов выполнения, в которых объект класса должен быть доступен для запросов на создание экземпляров.
Синтаксис
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;
Константы
CLSCTX_INPROC_SERVER Значение: 0x1 Код, создающий объекты этого класса и управляющий ими, представляет собой DLL, выполняемую в том же процессе, что и вызывающий объект функции, задающий контекст класса. |
CLSCTX_INPROC_HANDLER Значение: 0x2 Код, управляющий объектами этого класса, является внутрипроцессным обработчиком. Это библиотека DLL, которая выполняется в клиентском процессе и реализует клиентские структуры этого класса при удаленном доступе к экземплярам класса. |
CLSCTX_LOCAL_SERVER Значение: 0x4 EXE-код, создающий объекты этого класса и управляющий ими, выполняется на том же компьютере, но загружается в отдельное пространство процесса. |
CLSCTX_INPROC_SERVER16 Значение: 0x8 Является устаревшей. |
CLSCTX_REMOTE_SERVER Значение: 0x10 Удаленный контекст. Код LocalServer32 или LocalService , который создает объекты этого класса и управляет ими, выполняется на другом компьютере. |
CLSCTX_INPROC_HANDLER16 Значение: 0x20 Является устаревшей. |
CLSCTX_RESERVED1 Значение: 0x40 Зарезервировано. |
CLSCTX_RESERVED2 Значение: 0x80 Зарезервировано. |
CLSCTX_RESERVED3 Значение: 0x100 Зарезервировано. |
CLSCTX_RESERVED4 Значение: 0x200 Зарезервировано. |
CLSCTX_NO_CODE_DOWNLOAD Значение: 0x400 Отключает скачивание кода из службы каталогов или Из Интернета. Этот флаг нельзя задать одновременно с CLSCTX_ENABLE_CODE_DOWNLOAD. |
CLSCTX_RESERVED5 Значение: 0x800 Зарезервировано. |
CLSCTX_NO_CUSTOM_MARSHAL Значение: 0x1000 Укажите, если вы хотите, чтобы активация завершилась сбоем, если в ней используется настраиваемое маршалирование. |
CLSCTX_ENABLE_CODE_DOWNLOAD Значение: 0x2000 Позволяет скачивать код из службы каталогов или Из Интернета. Этот флаг нельзя задать одновременно с CLSCTX_NO_CODE_DOWNLOAD. |
CLSCTX_NO_FAILURE_LOG Значение: 0x4000 CLSCTX_NO_FAILURE_LOG можно использовать для переопределения ведения журнала сбоев в CoCreateInstanceEx. При создании ActivationFailureLoggingLevel состояние ведения журнала событий могут определять следующие значения:
|
CLSCTX_DISABLE_AAA Значение: 0x8000 Отключает активации AAA (активируется как активатор) только для этой активации. Этот флаг переопределяет параметр флага EOAC_DISABLE_AAA из перечисления EOLE_AUTHENTICATION_CAPABILITIES. Этот флаг нельзя задать одновременно с CLSCTX_ENABLE_AAA. Любая активация, при которой серверный процесс запускается под удостоверением вызывающей стороны, называется активацией как активатора (AAA). Отключение активации AAA позволяет приложению, работающему под привилегированной учетной записью (например, LocalSystem), предотвратить использование удостоверения для запуска ненадежных компонентов. Приложения библиотеки, использующие вызовы активации, всегда должны устанавливать этот флаг во время этих вызовов. Это помогает предотвратить использование приложения библиотеки при атаке безопасности с повышением привилегий. Это единственный способ отключить активацию AAA в приложении библиотеки, так как флаг EOAC_DISABLE_AAA из перечисления EOLE_AUTHENTICATION_CAPABILITIES применяется только к серверному процессу, а не к приложению библиотеки. Windows 2000: Этот флаг не поддерживается. |
CLSCTX_ENABLE_AAA Значение: 0x10000 Включает активации AAA (активируется как активатор) только для этой активации. Этот флаг переопределяет параметр флага EOAC_DISABLE_AAA из перечисления EOLE_AUTHENTICATION_CAPABILITIES. Этот флаг нельзя задать одновременно с CLSCTX_DISABLE_AAA. Любая активация, при которой серверный процесс запускается под удостоверением вызывающей стороны, называется активацией как активатора (AAA). Включение этого флага позволяет приложению передавать свое удостоверение активированным компонентам. Windows 2000: Этот флаг не поддерживается. |
CLSCTX_FROM_DEFAULT_CONTEXT Значение: 0x20000 Эту активацию следует начинать с контекста по умолчанию текущего апартмента. |
CLSCTX_ACTIVATE_X86_SERVER Значение: 0x40000 |
CLSCTX_ACTIVATE_32_BIT_SERVER Активация или подключение к 32-разрядной версии сервера; сбой, если он не зарегистрирован. |
CLSCTX_ACTIVATE_64_BIT_SERVER Значение: 0x80000 Активация или подключение к 64-разрядной версии сервера; сбой, если он не зарегистрирован. |
CLSCTX_ENABLE_CLOAKING Значение: 0x100000 При указании этого флага COM использует токен олицетворения потока, если он присутствует, для запроса на активацию, сделанного потоком. Если этот флаг не указан или если у потока нет маркера олицетворения, COM использует маркер процесса потока для запроса активации, сделанного потоком. Windows Vista или более поздней версии: Этот флаг поддерживается. |
CLSCTX_APPCONTAINER Значение: 0x400000 Указывает, что активация выполняется для контейнера приложения. Примечание Этот флаг зарезервирован для внутреннего использования и не предназначен для использования непосредственно из кода. |
CLSCTX_ACTIVATE_AAA_AS_IU Значение: 0x800000 Укажите этот флаг для поведения интерактивной активации пользователей для серверов As-Activator. Приложение Магазина Windows со строгим именем Medium IL может использовать этот флаг для запуска COM-сервера "Как активатор" без строгого имени. Кроме того, этот флаг можно использовать для привязки к работающему экземпляру COM-сервера, запущенного классическим приложением. Клиент должен иметь значение Medium IL, он должен иметь строгое имя, что означает, что у него есть SysAppID в маркере клиента, он не может находиться в сеансе 0 и должен иметь того же пользователя, что и пользователь идентификатора сеанса в маркере клиента. Если сервер находится вне процесса и является "Активатором", он запускает сервер с маркером пользователя сеанса клиентского маркера. Этот маркер не будет иметь строгого имени. Если сервер выходит за пределы процесса и выполняется "Интерактивный пользователь", этот флаг не действует. Если сервер находится вне процесса и имеет любой другой тип запуска от имени, активация завершается ошибкой. Этот флаг не действует для внутрипроцессных серверов. Активация за компьютером завершается сбоем при использовании этого флага. |
CLSCTX_RESERVED6 Значение: 0x1000000 |
CLSCTX_ACTIVATE_ARM32_SERVER Значение: 0x2000000 |
CLSCTX_PS_DLL Значение: 0x80000000 Используется для загрузки библиотек DLL прокси-сервера или заглушки. Примечание Этот флаг зарезервирован для внутреннего использования и не предназначен для использования непосредственно из кода. |
Комментарии
Значения перечисления CLSCTX используются в вызовах активации (CoCreateInstance, CoCreateInstanceEx, CoGetClassObject и т. д.), чтобы указать предпочтительный контекст выполнения (внутрипроцессный, локальный или удаленный), в котором должен выполняться объект. Они также используются в вызовах CoRegisterClassObject для указания набора контекстов выполнения, в которых объект класса должен быть доступен для запросов на создание экземпляров (IClassFactory::CreateInstance).
Чтобы указать, что допустимо несколько контекстов, можно объединить несколько значений с логическими OR. Контексты используются в порядке их перечисления.
При наличии набора флагов CLSCTX используемый контекст выполнения зависит от доступности зарегистрированных кодов классов и других параметров в соответствии со следующим алгоритмом.
- Если вызов задает одно из следующих значений, CLSCTX_REMOTE_SERVER подразумевается и добавляется в список флагов:
- Явная структура COSERVERINFO , указывающая, что компьютер отличается от текущего компьютера.
- Не указана явная структура COSERVERINFO , но указанный класс регистрируется с помощью значения реестра RemoteServerName или ActivateAtStorage .
- Если явный параметр COSERVERINFO указывает на текущий компьютер, CLSCTX_REMOTE_SERVER удаляется при наличии.
- Если флаги включают CLSCTX_REMOTE_SERVER и параметр COSERVERINFO не указан, и если запрос на активацию указывает постоянное состояние, из которого необходимо инициализировать объект (с coGetInstanceFromFile, CoGetInstanceFromIStorage или, для моникера файла, в вызове IMoniker::BindToObject), а класс имеет ActivateAtStorage подраздел или без сведений реестра классов запрос на активацию и инициализацию пересылается на компьютер, на котором находится постоянное состояние. (Дополнительные сведения см. в описании функций удаленной активации, перечисленных в разделе См. также.)
- Если флаги включают CLSCTX_INPROC_SERVER, код класса в библиотеке DLL, найденной в ключе InprocServer32 класса, используется, если этот ключ существует. Код класса будет выполняться в том же процессе, что и вызывающий объект.
- Если флаги включают CLSCTX_INPROC_HANDLER, код класса в библиотеке DLL, найденной в ключе InprocHandler32 класса, используется, если этот ключ существует. Код класса будет выполняться в том же процессе, что и вызывающий объект.
- Если флаги включают CLSCTX_LOCAL_SERVER, используется код класса в службе, найденной в ключе LocalService класса, если этот ключ существует. Если служба не указана, но в том же ключе указан EXE-файл, используется код класса, связанный с этим EXE- файлом. Код класса (в любом случае) будет выполняться в отдельном процессе службы на том же компьютере, что и вызывающий объект.
- Если для флага задано значение CLSCTX_REMOTE_SERVER а дополнительный параметр COSERVERINFO для функции указывает конкретный удаленный компьютер, запрос на активацию перенаправит на этот удаленный компьютер с флагами, измененными на CLSCTX_LOCAL_SERVER. Код класса будет выполняться в собственном процессе на этом конкретном компьютере, который должен отличаться от кода вызывающего объекта.
- Наконец, если флаги включают CLSCTX_REMOTE_SERVER и параметр COSERVERINFO не указан, а имя компьютера задано в параметре RemoteServerName класса с именем-значением, запрос на активацию перенаправит на этот удаленный компьютер с измененными флагами для CLSCTX_LOCAL_SERVER. Код класса будет выполняться в собственном процессе на этом конкретном компьютере, который должен отличаться от кода вызывающего объекта.
CLSCTX_ACTIVATE_32_BIT_SERVER и CLSCTX_ACTIVATE_64_BIT_SERVER
В 64-разрядных версиях Windows появились два новых флага: CLSCTX_ACTIVATE_32_BIT_SERVER и CLSCTX_ACTIVATE_64_BIT_SERVER. На 64-разрядном компьютере может сосуществовать 32-разрядная и 64-разрядная версии одного и того же COM-сервера. Когда клиент запрашивает активацию внепроцессного сервера, эти флаги CLSCTX позволяют клиенту указать 32-разрядную или 64-разрядную версию сервера.Как правило, клиенту не важно, используется ли 32-разрядная или 64-разрядная версия сервера. Однако если сам сервер загружает дополнительный внутрипроцессный сервер, он и внутрипроцессный сервер должны быть либо 32-разрядными, либо 64-разрядными. Например, предположим, что клиент хочет использовать сервер "A", который, в свою очередь, загружает внутрипроцессный сервер "B". Если доступна только 32-разрядная версия сервера "B", клиент должен указать 32-разрядную версию сервера "A". Если доступна только 64-разрядная версия сервера "B", клиент должен указать 64-разрядную версию сервера "A".
Сервер может указать собственные параметры архитектуры с помощью раздела реестра PreferredServerBitness, но предпочтения клиента, заданные с помощью флага CLSCTX_ACTIVATE_32_BIT_SERVER или CLSCTX_ACTIVATE_64_BIT_SERVER, переопределяют предпочтения сервера. Если клиент не указывает предпочтения, будет использоваться предпочтение сервера.
Если ни клиент, ни сервер не указывают предпочтения, то:
- Если компьютер, на котором размещен сервер, работает под управлением Windows Server 2003 с пакетом обновления 1 (SP1) или более поздней системы, com попытается сопоставить архитектуру сервера с архитектурой клиента. Другими словами, для 32-разрядного клиента COM активирует 32-разрядный сервер, если он доступен; в противном случае будет активирована 64-разрядная версия сервера. Для 64-разрядного клиента COM активирует 64-разрядный сервер, если он доступен; в противном случае он активирует 32-разрядный сервер.
- Если компьютер, на котором размещается сервер, работает под управлением Windows XP или Windows Server 2003 без установленного пакета обновления 1 (SP1) или более поздней версии, com предпочтет 64-разрядную версию сервера, если она доступна. в противном случае будет активирована 32-разрядная версия сервера.
В следующей таблице показаны результаты различных сочетаний клиентских архитектур и параметров клиента, а также серверных архитектур и параметров сервера.
Флаги CLSCTX_ACTIVATE_32_BIT_SERVER и CLSCTX_ACTIVATE_64_BIT_SERVER передаются через границы компьютера. Если компьютер, на котором размещен сервер, работает под управлением 64-разрядной версии Windows, он будет учитывать эти флаги; в противном случае они будут игнорироваться.
32-разрядный клиент без флага | 64-разрядный клиент без флага | 32-разрядный клиент, 32-разрядный флаг | 32-разрядный клиент, 64-разрядный флаг | 64-разрядный клиент, 32-разрядный флаг | 64-разрядный клиент, 64-разрядный флаг | |
---|---|---|---|---|---|---|
32-разрядный сервер, совпадает со значением реестра клиента | 32-разрядный сервер | См. ⁸ | 32-разрядный сервер | См. ⁸ | 32-разрядный сервер | См. ⁸ |
32-разрядный сервер, 32-разрядное значение реестра⁴ | 32-разрядный сервер | 32-разрядный сервер | 32-разрядный сервер | См. ⁸ | 32-разрядный сервер | См. ⁸ |
32-разрядный сервер, 64-разрядное значение реестра⁵ | См. ⁸ | См. ⁸ | 32-разрядный сервер | См. ⁸ | 32-разрядный сервер | См. ⁸ |
32-разрядный сервер без значения реестра⁶ | 32-разрядный сервер | 64/32⁹ | 32-разрядный сервер | См. ⁸ | 32-разрядный сервер | См. ⁸ |
32-разрядный сервер без значения реестра (до Windows Server 2003 с пакетом обновления 1 (SP1)⁷ | 64/32⁹ | 64/32⁹ | 32-разрядный сервер | См. ⁸ | 32-разрядный сервер | См. ⁸ |
64-разрядный сервер, совпадающий со значением реестра клиента | См. ⁸ | 64-разрядный сервер | См. ⁸ | 64-разрядный сервер | См. ⁸ | 64-разрядный сервер |
64-разрядный сервер, 32-разрядное значение реестра⁴ | См. ⁸ | См. ⁸ | См. ⁸ | 64-разрядный сервер | См. ⁸ | 64-разрядный сервер |
64-разрядный сервер, 64-разрядное значение реестра⁵ | 64-разрядный сервер | 64-разрядный сервер | См. ⁸ | 64-разрядный сервер | См. ⁸ | 64-разрядный сервер |
64-разрядный сервер, без значения реестра⁶ | 32/64¹ | 64-разрядный сервер | См. ⁸ | 64-разрядный сервер | См. ⁸ | 64-разрядный сервер |
64-разрядный сервер без значения реестра (до Windows Server 2003 с пакетом обновления 1 (SP1)⁷ | 64-разрядный сервер | 64-разрядный сервер | См. ⁸ | 64-разрядный сервер | См. ⁸ | 64-разрядный сервер |
PreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitness PreferredServerBitnessPreferredServerBitness
Требования
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Верхняя часть | wtypesbase.h |
См. также раздел
Создание объекта с помощью объекта класса