Перечисление 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. Строго именованное приложение Среднего IL Магазина Windows может использовать этот флаг для запуска COM-сервера As Activator без строгого имени. Кроме того, этот флаг можно использовать для привязки к работающему экземпляру COM-сервера, запущенного классическим приложением. Клиент должен быть средним il, он должен иметь строгое имя, что означает, что он имеет SysAppID в маркере клиента, он не может находиться в сеансе 0, и он должен иметь того же пользователя, что и пользователь идентификатора сеанса в маркере клиента. Если сервер выходит из процесса и "Как активатор", он запускает сервер с маркером пользователя сеанса клиентского маркера. Этот маркер не будет строго именован. Если сервер не выполняется и выполняется "Интерактивный пользователь", этот флаг не действует. Если сервер устарел и является любым другим типом RunAs, активация завершается ошибкой. Этот флаг не влияет на серверы внутрипроцессного процесса. Активация вне компьютера завершается сбоем при использовании этого флага. |
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".
Сервер может указать собственные предпочтения архитектуры с помощью раздела реестра
Если ни клиент, ни сервер не задает предпочтения, то:
- Если компьютер, на котором размещен сервер, работает под управлением 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-разрядный сервер |
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 2000 Профессиональный [только классические приложения] |
минимальный поддерживаемый сервер | Windows 2000 Server [только классические приложения] |
заголовка | wtypesbase.h |
См. также
создание объекта с помощью объекта класса