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 リモート コンテキスト。 このクラスのオブジェクトを作成および管理する 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) アクティブ化を無効にします。 このフラグは、EOLE_AUTHENTICATION_CAPABILITIES列挙体のEOAC_DISABLE_AAA フラグの設定をオーバーライドします。 このフラグは、CLSCTX_ENABLE_AAAと同時に設定することはできません。 呼び出し元の ID でサーバー プロセスが起動されるアクティブ化は、アクティブ化 (AAA) アクティブ化と呼ばれます。 AAA アクティベーションを無効にすると、特権アカウント (LocalSystem など) で実行されるアプリケーションは、その ID が信頼されていないコンポーネントの起動に使用されるのを防ぐことができます。 アクティブ化呼び出しを使用するライブラリ アプリケーションでは、これらの呼び出し中に常にこのフラグを設定する必要があります。 これにより、特権のエスカレーション セキュリティ攻撃でライブラリ アプリケーションが使用されるのを防ぐことができます。 ライブラリ アプリケーションで AAA アクティベーションを無効にする唯一の方法は、EOLE_AUTHENTICATION_CAPABILITIES列挙からのEOAC_DISABLE_AAA フラグが、ライブラリ アプリケーションではなく、サーバー プロセスにのみ適用されるためです。 Windows 2000: このフラグはサポートされていません。 |
CLSCTX_ENABLE_AAA 値: 0x10000 このアクティブ化に対してのみ、アクティブ化 (AAA) アクティブ化を有効にします。 このフラグは、EOLE_AUTHENTICATION_CAPABILITIES列挙体のEOAC_DISABLE_AAA フラグの設定をオーバーライドします。 このフラグは、CLSCTX_DISABLE_AAAと同時に設定することはできません。 呼び出し元の ID でサーバー プロセスが起動されるアクティブ化は、アクティブ化 (AAA) アクティブ化と呼ばれます。 このフラグを有効にすると、アプリケーションはその ID をアクティブ化されたコンポーネントに転送できます。 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 サーバーの対話型ユーザー アクティブ化動作にこのフラグを指定します。 厳密な名前の Medium IL Windows ストア アプリでは、このフラグを使用して、厳密な名前を持たない "As Activator" COM サーバーを起動できます。 また、このフラグを使用して、デスクトップ アプリケーションによって起動される COM サーバーの実行中のインスタンスにバインドすることもできます。 クライアントは Medium IL である必要があります。厳密な名前を付ける必要があります。つまり、クライアント トークンに SysAppID があり、セッション 0 に含まれず、クライアント トークン内のセッション ID のユーザーと同じユーザーが必要です。 サーバーがアウトプロセスで "アクティベーター" の場合は、クライアント トークンのセッション ユーザーのトークンを使用してサーバーを起動します。 このトークンには厳密な名前は付けられません。 サーバーがアウトプロセスで RunAs "Interactive User" の場合、このフラグは無効です。 サーバーがアウトプロセスで、他の 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 レジストリ値のいずれかに登録されます。
明示的に存在しないケースは、値が NULL として指定されている場合、または値が関数パラメーターの 1 つでない場合です (CoCreateInstance と CoGetClassObject呼び出しの場合と同様)。 - 明示的な COSERVERINFO パラメーターが現在のコンピューターを示している場合、CLSCTX_REMOTE_SERVERが存在する場合は削除されます。
- フラグにCLSCTX_REMOTE_SERVERが含まれ、COSERVERINFO パラメーター
指定されておらず、アクティブ化要求がオブジェクトの初期化元の永続的な状態を示す場合 ( coGetInstanceFromFile 、CoGetInstanceFromIStorage、または ファイル モニカーの場合、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_ACTIVATE_32_BIT_SERVER とCLSCTX_ACTIVATE_64_BIT_SERVER
Windows の 64 ビット バージョンでは、CLSCTX_ACTIVATE_32_BIT_SERVERとCLSCTX_ACTIVATE_64_BIT_SERVERの 2 つの新しいフラグが導入されています。 64 ビット コンピューターでは、同じ COM サーバーの 32 ビットバージョンと 64 ビット バージョンが共存する場合があります。 クライアントがアウトプロセス サーバーのアクティブ化を要求すると、これらの CLSCTX フラグにより、クライアントは 32 ビットバージョンまたは 64 ビット バージョンのサーバーを指定できます。通常、クライアントは、サーバーの 32 ビットバージョンと 64 ビット バージョンのどちらを使用しているかは気にしません。 ただし、サーバー自体が追加のインプロセス サーバーを読み込む場合は、サーバーとインプロセス サーバーの両方が 32 ビットまたは 64 ビットである必要があります。 たとえば、クライアントがサーバー "A" を使用し、インプロセス サーバー "B" を読み込むとします。 32 ビット バージョンのサーバー "B" のみを使用できる場合、クライアントはサーバー "A" の 32 ビット バージョンを指定する必要があります。 サーバー "B" の 64 ビット バージョンのみを使用できる場合、クライアントはサーバー "A" の 64 ビット バージョンを指定する必要があります。
サーバーは、PreferredServerBitness レジストリ キーを使用して独自のアーキテクチャ設定を指定できますが、CLSCTX_ACTIVATE_32_BIT_SERVERまたは CLSCTX_ACTIVATE_64_BIT_SERVER フラグを使用して指定されたクライアントの基本設定は、サーバーの基本設定をオーバーライドします。 クライアントが基本設定を指定しない場合は、サーバーの基本設定が使用されます。
クライアントとサーバーのどちらも優先設定を指定しない場合は、次のようにします。
- サーバーをホストするコンピューターが Windows Server 2003 Service Pack 1 (SP1) 以降のシステムを実行している場合、COM はサーバー アーキテクチャとクライアント アーキテクチャの照合を試みます。 つまり、32 ビット クライアントの場合、COM は 32 ビット サーバー (使用可能な場合) をアクティブにします。それ以外の場合は、64 ビット バージョンのサーバーがアクティブになります。 64 ビット クライアントの場合、COM は 64 ビット サーバー (使用可能な場合) をアクティブにします。それ以外の場合は、32 ビット サーバーがアクティブになります。
- サーバーをホストするコンピューターが、SP1 以降がインストールされていない Windows XP または Windows Server 2003 を実行している場合、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 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 ビット サーバー |
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows 2000 Server [デスクトップ アプリのみ] |
ヘッダー | wtypesbase.h |
関連項目
COSERVERINFO の
CoCreateInstanceEx を
クラス オブジェクト を使用してオブジェクトを作成する
IClassActivator::GetClassObject
リモート オブジェクト の検索の
実行中の EXE サーバー の登録の