IGlobalOptions インターフェイス (objidl.h)

コンポーネント オブジェクト モデル (COM) ランタイムのグローバル プロパティを設定およびクエリします。

継承

IGlobalOptions インターフェイスは、IUnknown インターフェイスから継承します。 IGlobalOptions には、 次の種類のメンバーもあります。

メソッド

IGlobalOptions インターフェイスには、これらのメソッドがあります。

 
IGlobalOptions::Query

IGlobalOptions::Query メソッド (objidl.h) は、COM ランタイムの指定されたグローバル プロパティに対してクエリを実行します。
IGlobalOptions::Set

IGlobalOptions::Set メソッド (objidl.h) は、COM ランタイムの指定されたグローバル プロパティを設定します。

注釈

このインターフェイスを使用して、COM ランタイムの次のグローバル プロパティを設定および照会できます。

プロパティ
COMGLB_APPID プロセスの AppID。 これは、Windows XP でサポートされている唯一のプロパティです。
COMGLB_EXCEPTION_HANDLING COMGLB_EXCEPTION_HANDLING プロパティに使用できる値は次のとおりです。
  • COMGLB_EXCEPTION_HANDLE: これが既定の動作です。 この設定により、COM ランタイムは致命的な例外を処理します。
  • COMGLB_EXCEPTION_DONOT_HANDLE: これにより、COM ランタイムで致命的な例外が処理されません。
  • COMGLB_EXCEPTION_DONOT_HANDLE_FATAL: COMGLB_EXCEPTION_DONOT_HANDLEのエイリアス。 Windows 7 以降でサポートされています。
  • COMGLB_EXCEPTION_DONOT_HANDLE_ANY: COM メソッドで設定され、致命的な例外が発生すると、COM ランタイムで例外が処理されません。

    COM メソッドで が設定され、致命的でない例外が発生すると、COM ランタイムによってWindows エラー報告 (WER) ダンプが作成され、プロセスが終了します。 Windows 7 以降でサポートされています。

既定では、COM ランタイムは、RPC_E_SERVERFAULTエラー コードをクライアントに返すことによって、メソッドの呼び出し中に発生した致命的な例外を処理します。 アプリケーションはこの動作を無効にして、例外が WER に伝達されるようにします。これにより、アプリケーション プロセス ダンプが作成され、アプリケーションが終了します。 これにより、データ破損の可能性が回避され、アプリケーション ベンダーがダンプをデバッグできるようになります。
メモ COM ランタイム例外処理が無効になっている場合でも、例外を処理するプロセスに別のアプリケーション レベルの例外ハンドラーがある場合、例外が WER に伝達されない可能性があります。
 
新しいアプリケーションの場合は、COMGLB_EXCEPTION_HANDLING プロパティを COMGLB_EXCEPTION_DONOT_HANDLE_ANY に設定することをお勧めします。
COMGLB_RPC_THREADPOOL_SETTING Set メソッドのCOMGLB_RPC_THREADPOOL_SETTING プロパティに使用できる値は次のとおりです。
  • COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL: 専用プライベート スレッド プールを使用するように RPC に指示します。
Query メソッドのCOMGLB_RPC_THREADPOOL_SETTING プロパティに使用できる値は次のとおりです。
  • COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL: RPC は専用のプライベート スレッド プールを使用します。
  • COMGLB_RPC_THREADPOOL_SETTING_DEFAULT_POOL: RPC では、システムの既定のスレッド プールが使用されます。
RPC では、Windows 7 では既定でシステム スレッド プールが使用されます。 システム スレッド プールはプロセス内の複数のコンポーネントによって共有されるため、スレッド プールの状態がコンポーネントによって破損している場合、COM と RPC の操作が正しく動作しない可能性があります。

COMGLB_RPC_THREADPOOL_SETTING プロパティを使用して、RPC スレッド プールの動作を変更できます。 既定の動作を変更すると、RPC で余分なスレッドが使用されるため、パフォーマンスが低下します。 そのため、この設定を変更するときは注意が必要です。 この設定は、アプリケーションの互換性の理由からのみ変更することをお勧めします。

メモ このプロパティは、プロセスで COM が初期化された直後に設定する必要があります。 COM が RPC チャネルを初期化する操作 (オブジェクト参照のマーシャリングやマーシャリング解除など) を実行した後にこのプロパティを設定すると、 Set メソッドは失敗します。
 
メモ このプロパティは、Windows 7 以降のバージョンの Windows でのみサポートされています。
COMGLB_RO_SETTINGS COMGLB_RO_SETTINGS プロパティに使用できる値は次のとおりです。
  • COMGLB_FAST_RUNDOWN: 現在のプロセスのスタブに高速スタブ ランダウン動作が適用されることを示します。つまり、通常のクリーンアップ タイムアウトの有効期限が切れるのを待つのではなく、クライアント プロセスの終了時にスタブが実行されます。
  • COMGLB_STA_MODALLOOP_REMOVE_TOUCH_MESSAGES: STA モーダル ループのメッセージ キューからタッチ メッセージを削除します。
  • COMGLB_STA_MODALLOOP_SHARED_QUEUE_REMOVE_INPUT_MESSAGES: スレッドのメッセージ キューがアタッチされると、STA モーダル ループで入力メッセージが削除されます。
  • COMGLB_STA_MODALLOOP_SHARED_QUEUE_DONOT_REMOVE_INPUT_MESSAGES: スレッドのメッセージ キューがアタッチされている場合、入力メッセージは STA モーダル ループでは削除されません。
  • COMGLB_STA_MODALLOOP_SHARED_QUEUE_REORDER_POINTER_MESSAGES: スレッドのメッセージ キューがアタッチされている場合、ポインター入力メッセージは STA モーダル ループでは削除されませんが、アタッチされたキューから発生するデッドロックを回避するために一時的にマスクされます。
  • COMGLB_RESERVED1: 将来の使用のために予約されています。
  • COMGLB_RESERVED2: 将来の使用のために予約されています。
  • COMGLB_RESERVED3: 将来の使用のために予約されています。
メモこのプロパティは、Windows 8 以降のバージョンの Windows でのみサポートされています。
COMGLB_UNMARSHALING_POLICY COMGLB_UNMARSHALING_POLICY プロパティに使用できる値は次のとおりです。
  • COMGLB_UNMARSHALING_POLICY_NORMAL: マーシャリング解除動作は、Windows 8よりも前のバージョンと同じです。 このフラグがCoInitializeSecurity で設定されている場合は、EOAC_NO_CUSTOM_MARSHAL制限が適用されます。 それ以外の場合は、制限はありません。 これは、アプリ コンテナーにないプロセスの既定値です。
  • COMGLB_UNMARSHALING_POLICY_STRONG: Unmarshaling では、 CoAllowUnmarshalerCLSID 関数によってプロセスごとに許可される強化された非マーシャラーとアンマーシャラーのシステム信頼リストのみが許可されます。 これは、アプリ コンテナー内のプロセスの既定値です。
  • COMGLB_UNMARSHALING_POLICY_HYBRID: ソースがアプリ コンテナーであるデータのマーシャリング解除では、 CoAllowUnmarshalerCLSID 関数によってプロセスごとに許可されるセキュリティ強化された非マーシャラーと非マーシャラーのシステム信頼リストのみが許可されます。 アプリ コンテナーではないソースを含むデータのマーシャリング解除動作は、以前のバージョンとは変更されません。
メモこのプロパティは、Windows 8 以降のバージョンの Windows でのみサポートされています。
 

クラッシュやその他の例外を検出するアプリケーションでは、ローカル サーバーでの呼び出しや IDropTarget::D rop メソッドの実行時など、受信 COM 呼び出しの実行中に生成される可能性がある例外を検出し、COMGLB_EXCEPTION_HANDLINGを COMGLB_EXCEPTION_DONOT_HANDLE に設定して、例外をキャッチする COM の動作を無効にすることが重要です。 これを行わないと、プロセスの状態が破損する可能性があります。たとえば、これらの例外がスローされたときに保持されるロックが破棄され、プロセスが不整合な状態になる可能性があります。

このようなアプリケーションはすべて、起動時にこのコードを実行する必要があります。

    IGlobalOptions *pGlobalOptions;
    hr =  CoCreateInstance(CLSID_GlobalOptions, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pGlobalOptions));
    if (SUCCEEDED(hr))
    {
        hr = pGlobalOptions->Set(COMGLB_EXCEPTION_HANDLING, COMGLB_EXCEPTION_DONOT_HANDLE);
        pGlobalOptions->Release();
    }

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー objidl.h (ObjIdl.h を含む)

こちらもご覧ください

IMarshalingStream