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
遠端內容。 建立和管理此類別物件的 LocalServer32LocalService 程式碼在不同的電腦上執行。
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,下列值可以判斷事件記錄的狀態:


  • 0 = 任意記錄。 根據預設,記錄檔,但用戶端可以在 CoCreateInstanceEx中指定CLSCTX_NO_FAILURE_LOG來覆寫。

  • 1 = 不論用戶端指定什麼,一律記錄所有失敗。

  • 2 = 無論指定的用戶端為何,永遠不要記錄任何失敗。 如果遺漏登錄專案,預設值為 0。 如果您需要控制客戶應用程式,建議您將此值設定為 0,並撰寫用戶端程式代碼來覆寫失敗。 強烈建議您不要將值設定為 2。 如果停用事件記錄,診斷問題會比較困難。

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、CoCreateInstanceExCoGetClassObject等) ,以指出要在其中執行物件的慣用執行內容 (同進程、本機或遠端) 。 它們也會用於 呼叫 CoRegisterClassObject ,以指出類別物件可供建構實例的要求 (IClassFactory::CreateInstance) 的執行內容集。

若要指出可以接受多個內容,您可以將多個值與布林值結合。 內容會依照列出的順序來嘗試。

假設有一組 CLSCTX 旗標,要使用的執行內容取決於已註冊類別程式碼的可用性,以及根據下列演算法的其他參數。

  1. 如果呼叫指定下列其中一項,則會隱含CLSCTX_REMOTE_SERVER並新增至旗標清單:
    1. 明確 COSERVERINFO 結構,表示與目前電腦不同的電腦。
    2. 未指定明確的 COSERVERINFO 結構,但指定的類別會向 RemoteServerNameActivateAtStorage 登錄值註冊。
    第二種案例可讓發行分散式 COM 之前所撰寫的應用程式,做為類別的設定,以供 DCOM 和 CLSCTX_REMOTE_SERVER 旗標之前提供的用戶端應用程式使用遠端啟用。 沒有明確 COSERVERINFO 結構的案例是當值指定為 Null ,或不是其中一個函式參數時, (如同 呼叫 CoCreateInstanceCoGetClassObject) 。
  2. 如果明確的 COSERVERINFO 參數指出目前的電腦,如果存在,則會移除CLSCTX_REMOTE_SERVER。
其餘的處理會依下列順序查看 (s) 的值:
  1. 如果旗標包含 CLSCTX_REMOTE_SERVER,而且未指定COSERVERINFO參數,而且啟用要求指出要從中初始化物件 (與CoGetInstanceFromFile、CoGetInstanceFromIStorage或檔案 Moniker 呼叫IMoniker::BindToObject) ,且類別具有ActivateAtStorage子機碼或無類別登錄資訊,啟動和初始化的要求會轉送到永續性狀態所在的電腦。 (請參閱另請參閱一節中所列的遠端啟用函式以取得詳細資料。)
  2. 如果旗標包含CLSCTX_INPROC_SERVER,則如果此機碼存在,則會使用在類別 的 InprocServer32 機碼下找到 DLL 中的類別程式碼。 類別程式碼會在與呼叫端相同的進程中執行。
  3. 如果旗標包含CLSCTX_INPROC_HANDLER,則如果此機碼存在,則會使用在類別 的 InprocHandler32 機碼下找到 DLL 中的類別程式碼。 類別程式碼會在與呼叫端相同的進程中執行。
  4. 如果旗標包含CLSCTX_LOCAL_SERVER,則會使用此機碼存在時,會在服務中找到的類別程式碼位於類別的 LocalService 金鑰下。 如果未指定任何服務,但在相同的索引鍵下指定 EXE,則會使用與該 EXE 相關聯的類別程式碼。 在任一情況下,) 類別程式碼 (將會在與呼叫端相同的電腦上,于個別的服務進程中執行。
  5. 如果旗標設定為 CLSCTX_REMOTE_SERVER,而函式的其他 COSERVERINFO 參數會指定特定的遠端電腦,則會將啟用的要求轉送到此遠端電腦,且旗標已修改為CLSCTX_LOCAL_SERVER。 類別程式碼將會在此特定電腦上自行執行,這必須與呼叫端的程式不同。
  6. 最後,如果旗標包含 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 列舉同時設定CLSCTX_ACTI加值稅E_32_BIT_SERVER和CLSCTX_ACTI加值稅E_64_BIT_SERVER旗標,則它無效,而且啟用會傳回E_INVALIDARG。

下表顯示各種用戶端架構和用戶端設定組合的結果,以及伺服器架構和伺服器設定。

旗標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

另請參閱

BIND_OPTS2

COSERVERINFO

CoCreateInstance

CoCreateInstanceEx

CoGetClassObject

CoGetInstanceFromFile

CoGetInstanceFromIStorage

CoRegisterClassObject

透過類別物件建立物件

IClassActivator::GetClassObject

尋找遠端物件

註冊執行中的 EXE 伺服器