clSCTX 列舉 (wtypesbase.h)
在啟用呼叫中使用的值,表示要在其中執行物件的執行內容。 這些值也用於 對 CoRegisterClassObject 的呼叫,以指出類別物件可供建構實例的要求使用的一組執行內容。
Syntax
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 管理這個類別之物件的程式碼是同處理序 (In-Process) 處理常式。 這是在用戶端進程中執行的 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 僅針對此啟動過程 (Activation) 停用 Activate-As-Activator (AAA) 啟動過程。 此旗標會覆寫EOLE_AUTHENTICATION_CAPABILITIES列舉中EOAC_DISABLE_AAA旗標的設定。 此旗標無法與CLSCTX_ENABLE_AAA同時設定。 在呼叫端的身分識別下啟動伺服器進程的任何啟用稱為啟動即啟動器, (AAA) 啟用。 停用 AAA 啟用可讓以特殊許可權帳戶執行的應用程式 (,例如 LocalSystem) ,協助防止其身分識別用來啟動不受信任的元件。 使用啟用呼叫的程式庫應用程式應該在這些呼叫期間一律設定此旗標。 這有助於防止程式庫應用程式用於提高許可權的安全性攻擊。 這是停用程式庫應用程式中 AAA 啟用的唯一方式,因為EOLE_AUTHENTICATION_CAPABILITIES列舉中的EOAC_DISABLE_AAA旗標只會套用至伺服器進程,而不是套用至程式庫應用程式。 Windows 2000: 不支援此旗標。 |
CLSCTX_ENABLE_AAA 值: 0x10000 僅針對此啟動過程啟用 activate-as-activator (AAA) 啟動過程。 此旗標會覆寫EOLE_AUTHENTICATION_CAPABILITIES列舉中EOAC_DISABLE_AAA旗標的設定。 此旗標無法與CLSCTX_DISABLE_AAA同時設定。 在呼叫端的身分識別下啟動伺服器進程的任何啟用稱為啟動即啟動器, (AAA) 啟用。 啟用此旗標可讓應用程式將其身分識別傳輸至已啟用的元件。 Windows 2000: 不支援此旗標。 |
CLSCTX_FROM_DEFAULT_CONTEXT 值: 0x20000 從目前 Apartment 的預設內容開始這個啟動過程。 |
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 伺服器指定互動式使用者啟用行為的這個旗標。 強式名稱的 Medium IL Windows 市集應用程式可以使用此旗標來啟動不含強式名稱的「啟用者」COM 伺服器。 此外,您可以使用這個旗標系結至桌面應用程式所啟動之 COM 伺服器的執行中實例。 用戶端必須是 Medium IL,它必須以強式名稱命名,這表示它在用戶端權杖中具有 SysAppID,它不能位於會話 0 中,而且必須有與用戶端權杖中會話識別碼使用者相同的使用者。 如果伺服器跨進程且「啟用者」,它會使用用戶端權杖會話使用者的權杖啟動伺服器。 此權杖不會強式名稱。 如果伺服器跨進程且 RunAs「互動式使用者」,則此旗標沒有任何作用。 如果伺服器已跨進程,而且是任何其他 RunAs 類型,則啟用會失敗。 此旗標對進程內伺服器沒有任何作用。 使用這個旗標時,非電腦啟用會失敗。 |
CLSCTX_RESERVED6 值: 0x1000000 |
CLSCTX_ACTIVATE_ARM32_SERVER 值: 0x2000000 |
CLSCTX_PS_DLL 值: 0x80000000 用於載入 Proxy/Stub DLL。 注意 此旗標會保留供內部使用,並不適合直接從您的程式碼使用。 |
備註
CLSCTX列舉中的值用於啟用呼叫 (CoCreateInstance、CoCreateInstanceEx、CoGetClassObject等) ,以指出要在其中執行物件的慣用執行內容 (同進程、本機或遠端) 。 它們也會用於 呼叫 CoRegisterClassObject ,以指出類別物件可供建構實例的要求 (IClassFactory::CreateInstance) 的執行內容集。
若要指出可以接受多個內容,您可以將多個值與布林值結合。 內容會依照列出的順序來嘗試。
假設有一組 CLSCTX 旗標,要使用的執行內容取決於已註冊類別程式碼的可用性,以及根據下列演算法的其他參數。
- 如果呼叫指定下列其中一項,則會隱含CLSCTX_REMOTE_SERVER並新增至旗標清單:
- 明確 COSERVERINFO 結構,表示與目前電腦不同的電腦。
- 未指定明確的 COSERVERINFO 結構,但指定的類別會向 RemoteServerName 或 ActivateAtStorage 登錄值註冊。
- 如果明確的 COSERVERINFO 參數指出目前的電腦,如果存在,則會移除CLSCTX_REMOTE_SERVER。
- 如果旗標包含 CLSCTX_REMOTE_SERVER,而且未指定COSERVERINFO參數,而且啟用要求指出要從中初始化物件 (與CoGetInstanceFromFile、CoGetInstanceFromIStorage或檔案 Moniker 呼叫IMoniker::BindToObject) ,且類別具有ActivateAtStorage子機碼或無類別登錄資訊,啟動和初始化的要求會轉送到永續性狀態所在的電腦。 (請參閱另請參閱一節中所列的遠端啟用函式以取得詳細資料。)
- 如果旗標包含CLSCTX_INPROC_SERVER,則如果此機碼存在,則會使用在類別 的 InprocServer32 機碼下找到 DLL 中的類別程式碼。 類別程式碼會在與呼叫端相同的進程中執行。
- 如果旗標包含CLSCTX_INPROC_HANDLER,則如果此機碼存在,則會使用在類別 的 InprocHandler32 機碼下找到 DLL 中的類別程式碼。 類別程式碼會在與呼叫端相同的進程中執行。
- 如果旗標包含CLSCTX_LOCAL_SERVER,則會使用此機碼存在時,會在服務中找到的類別程式碼位於類別的 LocalService 金鑰下。 如果未指定任何服務,但在相同的索引鍵下指定 EXE,則會使用與該 EXE 相關聯的類別程式碼。 在任一情況下,) 類別程式碼 (將會在與呼叫端相同的電腦上,于個別的服務進程中執行。
- 如果旗標設定為 CLSCTX_REMOTE_SERVER,而函式的其他 COSERVERINFO 參數會指定特定的遠端電腦,則會將啟用的要求轉送到此遠端電腦,且旗標已修改為CLSCTX_LOCAL_SERVER。 類別程式碼將會在此特定電腦上自行執行,這必須與呼叫端的程式不同。
- 最後,如果旗標包含 CLSCTX_REMOTE_SERVER,而且未指定 COSERVERINFO 參數,而且如果電腦名稱稱是在類別的 RemoteServerName 具名值下指定,則會將啟用的要求轉送至此遠端電腦,且旗標已修改為CLSCTX_LOCAL_SERVER。 類別程式碼將會在此特定電腦上自行執行,這必須與呼叫端的程式不同。
CLSCTX_ACTI加值稅E_32_BIT_SERVER和CLSCTX_ACTI加值稅E_64_BIT_SERVER
64 位版本的 Windows 引進了兩個新的旗標:CLSCTX_ACTI加值稅E_32_BIT_SERVER 和 CLSCTX_ACTI加值稅E_64_BIT_SERVER。 在 64 位電腦上,相同 COM 伺服器的 32 位和 64 位版本可能會並存。 當用戶端要求啟用跨進程伺服器時,這些 CLSCTX 旗標可讓用戶端指定 32 位或 64 位版本的伺服器。用戶端通常會不小心使用 32 位或 64 位版本的伺服器。 不過,如果伺服器本身載入額外的進程內伺服器,則它和進程內伺服器都必須是 32 位或 64 位。 例如,假設用戶端想要使用伺服器 「A」,進而載入進程伺服器 「B」。 如果只有 32 位版本的伺服器 「B」 可用,則用戶端必須指定 32 位版本的伺服器 「A」。 如果只有 64 位版本的伺服器 「B」 可用,則用戶端必須指定 64 位版本的伺服器 「A」。
伺服器可以透過 PreferredServerBitness 登錄機碼指定自己的架構喜好設定,但用戶端的喜好設定是透過CLSCTX_ACTI加值稅E_32_BIT_SERVER或CLSCTX_ACTI加值稅E_64_BIT_SERVER旗標指定的,將會覆寫伺服器的喜好設定。 如果用戶端未指定喜好設定,則會使用伺服器的喜好設定。
如果用戶端或伺服器都未指定喜好設定,則:
- 如果裝載伺服器的電腦執行 Windows Server 2003 Service Pack 1 (SP1) 或更新版本系統,COM 會嘗試將伺服器架構與用戶端架構相符。 換句話說,若為 32 位用戶端,COM 會在可用時啟動 32 位伺服器;否則會啟動 64 位版本的伺服器。 若為 64 位用戶端,COM 會在可用時啟動 64 位伺服器;否則會啟動 32 位伺服器。
- 如果主控伺服器的電腦執行的是 Windows XP 或 Windows Server 2003,但未安裝 SP1 或更新版本,則 COM 會偏好使用 64 位版本的伺服器;否則會啟動 32 位版本的伺服器。
下表顯示各種用戶端架構和用戶端設定組合的結果,以及伺服器架構和伺服器設定。
旗標CLSCTX_ACTI加值稅E_32_BIT_SERVER和CLSCTX_ACTI加值稅E_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 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 sp1) ⁷ 之前沒有登錄值 ( | 64 位伺服器 | 64 位伺服器 | 請參閱 ⁸ | 64 位伺服器 | 請參閱 ⁸ | 64 位伺服器 |
PreferredServerBitness PreferredServerBitnessPreferredServerBitnessPreferredServerBitness PreferredServerBitness PreferredServerBitness
規格需求
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
標頭 | wtypesbase.h |