CorBindToRuntime 関数

アンマネージ ホストが共通言語ランタイム (CLR: Common Language Runtime) をプロセスに読み込むことを有効にします。

この関数は、.NET Framework Version 4 では推奨されていません。

HRESULT CorBindToRuntime (
    [in]  LPCWSTR     pwszVersion, 
    [in]  LPCWSTR     pwszBuildFlavor, 
    [in]  REFCLSID    rclsid, 
    [in]  REFIID      riid, 
    [out] LPVOID FAR  *ppv
);

パラメーター

  • pwszVersion
    [入力] 読み込む CLR のバージョンを示す文字列。

    .NET Framework のバージョン番号は、major.minor.build.revision のように、ピリオドで区切られた 4 つの部分で構成されています。 pwszVersion として渡される文字列は、文字 "v" で始まり、バージョン番号の最初の 3 つの部分がその後に続く必要があります (たとえば "v1.0.1529")。

    いくつかのバージョンの CLR は、以前のバージョンの CLR との互換性を指定するポリシー ステートメントと共にインストールされています。 既定では、スタートアップ shim により、ポリシー ステートメントに対して pwszVersion が評価され、要求されたバージョンと互換性がある最新バージョンのランタイムが読み込まれます。 ホストは shim に対し、次に示すように flags パラメーターで値 STARTUP_LOADER_SAFEMODE を渡すことにより、ポリシー評価を省略し、pwszVersion で指定されたバージョンとまったく同じバージョンを読み込ませることができます。

    呼び出し元が pwszVersion に null を指定すると、ランタイムの最新バージョンが読み込まれます。 null を渡すと、ホストはどのバージョンのランタイムを読み込むかを制御できなくなります。 状況によってはこのような方法が適切なこともありますが、読み込むバージョンを特定させておくことを強くお勧めします。

  • pwszBuildFlavor
    [入力] CLR のサーバー ビルドまたはワークステーション ビルドのどちらを読み込むかを指定する文字列。 有効値は svr または wks です。 ワークステーション ビルドはシングルプロセッサ コンピューターでクライアント アプリケーションを実行するために最適化され、サーバー ビルドはガベージ コレクションでマルチ プロセッサを利用するために最適化されています。

    pwszBuildFlavor が null に設定されている場合は、ワークステーション ビルドが読み込まれます。 シングルプロセッサ コンピューターで実行するときは、pwszBuildFlavor が svr に設定されている場合でも、常にワークステーション ビルドが読み込まれます。 ただし、pwszBuildFlavor が svr に設定され、同時実行ガベージ コレクションが指定されている場合は (flags パラメーターを参照)、サーバー ビルドが読み込まれます。

  • rclsid
    [入力] ICorRuntimeHost インターフェイスまたは ICLRRuntimeHost インターフェイスを実装するコクラスの CLSID。 サポートされている値は CLSID_CorRuntimeHost と CLSID_CLRRuntimeHost です。

  • riid
    [入力] 要求された rclsid のインターフェイスの IID。 サポートされている値は IID_ICorRuntimeHost と IID_ICLRRuntimeHost です。

  • ppv
    [出力] 返された riid へのインターフェイス ポインター。

解説

pwszVersion で指定したランタイムのバージョンが存在しない場合は、CorBindToRuntimeEx は CLR_E_SHIM_RUNTIMELOAD の HRESULT 値を返します。

Windows ID の実行コンテキストとフロー

CLR のバージョン 1 では、WindowsIdentity オブジェクトは、新しいスレッド、スレッド プール、タイマー コールバックなどの非同期ポイント間をフローしません。 CLR のバージョン 2.0 では、ExecutionContext オブジェクトは現在実行しているスレッドに関する情報をラップして非同期ポイント間をフローしますが、アプリケーション ドメインの境界を越えることはありません。 同様に、WindowsIdentity オブジェクトもすべての非同期ポイント間をフローします。 したがって、現在スレッドに偽装がある場合は、その偽装もフローします。

2 つの方法のいずれかでフローを変更できます。

  1. ExecutionContext 設定を変更し、スレッド単位ではフローしないようにします (SuppressFlowSuppressFlow、および SuppressFlowWindowsIdentity の各メソッドを参照)。

  2. 処理の既定のモードを、現在のスレッドの ExecutionContext 設定がどの状態でも WindowsIdentity オブジェクトは非同期ポイント間をフローしない、バージョン 1 互換モードに変更します。 既定のモードを変更する方法は、CLR を読み込むときにマネージ実行可能ファイルを使用するか、アンマネージ ホスト インターフェイスを使用するかに応じて異なります。

    1. マネージ実行可能ファイルを使用する場合は、<legacyImpersonationPolicy> 要素の enabled 属性を true に設定する必要があります。

    2. アンマネージ ホスト インターフェイスを使用する場合は、CorBindToRuntimeEx 関数を呼び出すときの flags パラメーターに STARTUP_LEGACY_IMPERSONATION フラグを設定します。

    バージョン 1 互換モードは、その処理全体および処理のすべてのアプリケーション ドメインに適用されます。

解説

CorBindToRuntimeEx および CorBindToRuntime は同じ操作を実行しますが、CorBindToRuntimeEx 関数により、CLR の動作を指定するようにフラグを設定できます。

必要条件

プラットフォーム: 「.NET Framework システム要件」を参照

ヘッダー : MSCorEE.h

ライブラリ: MSCorEE.dll

.NET Framework のバージョン: 4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1、1.0

参照

参照

CorBindToCurrentRuntime 関数

CorBindToRuntimeByCfg 関数

CorBindToRuntimeEx 関数

CorBindToRuntimeHost 関数

ICorRuntimeHost インターフェイス

その他の技術情報

.NET Framework 1.1 および 2.0 のホスト グローバル静的関数