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 が作成された場合、次の値によってイベント ログの状態が決まります。


  • 0 = 随意ログ。 既定ではログを記録しますが、クライアントは CoCreateInstanceEx で CLSCTX_NO_FAILURE_LOGを指定することでオーバーライドできます。

  • 1 = クライアントが指定した内容に関係なく、すべてのエラーを常にログに記録します。

  • 2 = 指定したクライアントに関係なく、エラーをログに記録しないでください。 レジストリ エントリが見つからない場合、既定値は 0 です。 顧客アプリケーションを制御する必要がある場合は、この値を 0 に設定し、エラーをオーバーライドするクライアント コードを記述することをお勧めします。 値を 2 に設定しないことを強くお勧めします。 イベント ログが無効になっている場合、問題を診断することはより困難です。

CLSCTX_DISABLE_AAA
値: 0x8000
このアクティベーションに対してのみ、AAA (Activate-As-Activator) アクティベーションを無効にします。 このフラグは、EOLE_AUTHENTICATION_CAPABILITIES列挙からのEOAC_DISABLE_AAA フラグの設定をオーバーライドします。 このフラグは、CLSCTX_ENABLE_AAAと同時に設定することはできません。 呼び出し元の ID でサーバー プロセスが起動されるアクティブ化は、アクティブ化 (AAA) アクティブ化と呼ばれます。 AAA アクティベーションを無効にすると、特権アカウント (LocalSystem など) で実行されるアプリケーションは、その ID が信頼されていないコンポーネントの起動に使用されるのを防ぐことができます。 アクティブ化呼び出しを使用するライブラリ アプリケーションでは、これらの呼び出し中に常にこのフラグを設定する必要があります。 これにより、特権のエスカレーション セキュリティ攻撃でライブラリ アプリケーションが使用されるのを防ぐことができます。 EOLE_AUTHENTICATION_CAPABILITIES列挙体のEOAC_DISABLE_AAA フラグはサーバー プロセスにのみ適用され、ライブラリ アプリケーションには適用されないため、ライブラリ アプリケーションで AAA アクティブ化を無効にする唯一の方法です。

Windows 2000: このフラグはサポートされていません。
CLSCTX_ENABLE_AAA
値: 0x10000
このアクティベーションに対してのみ、AAA (Activate-As-Activator) アクティベーションを有効にします。 このフラグは、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 のユーザーと同じユーザーが必要です。

サーバーがアウトプロセスで "As Activator" の場合、クライアント トークンのセッション ユーザーのトークンを使用してサーバーを起動します。 このトークンには厳密な名前は付けられません。

サーバーがアウトプロセスで RunAs "Interactive User" である場合、このフラグは無効です。

サーバーがアウトプロセスで、他の RunAs 型である場合、アクティブ化は失敗します。

このフラグは、インプロセス サーバーには影響しません。

このフラグを使用すると、マシン外のアクティブ化は失敗します。
CLSCTX_RESERVED6
値: 0x1000000
CLSCTX_ACTIVATE_ARM32_SERVER
値: 0x2000000
CLSCTX_PS_DLL
値: 0x80000000
プロキシ/スタブ DLL の読み込みに使用されます。


メモ このフラグは内部使用用に予約されており、コードから直接使用するためのものではありません。

 

解説

CLSCTX 列挙体の値は、アクティブ化呼び出し (CoCreateInstanceCoCreateInstanceExCoGetClassObject など) で使用され、オブジェクトを実行する優先実行コンテキスト (インプロセス、ローカル、またはリモート) を示します。 また、 CoRegisterClassObject の呼び出しでも使用され、インスタンスを構築する要求でクラス オブジェクトを使用できるようにする実行コンテキストのセットを示します (IClassFactory::CreateInstance)。

複数のコンテキストが許容されることを示すために、複数の値をブール型の OR と組み合わせることができます。 コンテキストは、一覧表示されている順序で試行されます。

CLSCTX フラグのセットを指定すると、使用される実行コンテキストは、次のアルゴリズムに従って、登録済みのクラス コードとその他のパラメーターの可用性によって異なります。

  1. 呼び出しで次のいずれかを指定した場合、CLSCTX_REMOTE_SERVERが暗黙的に指定され、フラグの一覧に追加されます。
    1. 現在のコンピューターとは異なるコンピューターを示す明示的な COSERVERINFO 構造体。
    2. 明示的な COSERVERINFO 構造体は指定されていませんが、指定したクラスは RemoteServerName または ActivateAtStorage レジストリ値のいずれかに登録されます。
    2 番目のケースでは、分散 COM のリリース前に作成されたアプリケーションを、DCOM および CLSCTX_REMOTE_SERVER フラグの前に使用できるクライアント アプリケーションでリモート アクティブ化用のクラスの構成にすることができます。 明示的な COSERVERINFO 構造体が存在しないケースは、値が NULL として指定されている場合、または関数パラメーターの 1 つでない場合です ( CoCreateInstanceCoGetClassObject の呼び出しのように)。
  2. 明示的な COSERVERINFO パラメーターが現在のコンピューターを示している場合、CLSCTX_REMOTE_SERVERが存在する場合は削除されます。
残りの処理は、次の順序で値を調べることによって続行されます。
  1. フラグにCLSCTX_REMOTE_SERVERが含まれており、 COSERVERINFO パラメーターが指定されておらず、アクティブ化要求がオブジェクトを初期化する永続的な状態を示す場合 ( CoGetInstanceFromFileCoGetInstanceFromIStorage、またはファイル モニカーの場合は 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_ACTIVATE_32_BIT_SERVERとCLSCTX_ACTIVATE_64_BIT_SERVER

64 ビット バージョンの Windows では、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" のみが使用可能な場合、クライアントは 32 ビット バージョンのサーバー "A" を指定する必要があります。 64 ビット バージョンのサーバー "B" のみが使用可能な場合、クライアントは 64 ビット バージョンのサーバー "A" を指定する必要があります。

サーバーは 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 列挙に CLSCTX_ACTIVATE_32_BIT_SERVER フラグと CLSCTX_ACTIVATE_64_BIT_SERVER フラグの両方が設定されている場合、そのフラグは無効であり、アクティブ化によってE_INVALIDARGが返されます。

次の表に、クライアント アーキテクチャとクライアント設定、サーバー アーキテクチャ、サーバー設定のさまざまな組み合わせの結果を示します。

フラグ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 ビット サーバー
 

PreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitness PreferredServerBitnessPreferredServerBitness

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
Header wtypesbase.h

関連項目

BIND_OPTS2

COSERVERINFO

Cocreateinstance

CoCreateInstanceEx

CoGetClassObject

CoGetInstanceFromFile

CoGetInstanceFromIStorage

CoRegisterClassObject

クラス オブジェクトを使用してオブジェクトを作成する

IClassActivator::GetClassObject

リモート オブジェクトの検索

実行中の EXE サーバーの登録