CorBindToRuntime 関数

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

この関数は、.NET Framework 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 に設定されている場合は、ワークステーション ビルドが読み込まれます。 シングルプロセッサ コンピューターで実行するときは、pwszBuildFlavorsvr に設定されている場合でも、常にワークステーション ビルドが読み込まれます。 ただし、pwszBuildFlavorsvr に設定され、同時実行ガベージ コレクションが指定されている場合は (flags パラメーターを参照)、サーバー ビルドが読み込まれます。

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

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

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

解説

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

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

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

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

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

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

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

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

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

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

必要条件

:システム要件」を参照してください。

ヘッダー: MSCorEE.h

ライブラリ: MSCorEE.dll

.NET Framework のバージョン: 1.0 以降で使用可能

関連項目