次の方法で共有


CorBindToRuntime 関数

アンマネージ ホストが共通言語ランタイム (CLR) をプロセスに読み込むことができます。

この関数は、.NET Framework 4 では非推奨になりました。

構文

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

パラメーター

pwszVersion [in]読み込む CLR のバージョンを説明する文字列。

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

CLR の一部のバージョンは、以前のバージョンの CLR との互換性を指定するポリシー ステートメントと共にインストールされます。 既定では、スタートアップ shim はポリシー ステートメントに対して pwszVersion を評価し、要求されているバージョンと互換性のある最新バージョンのランタイムを読み込みます。 ホストは、以下で説明するように、flags パラメーターに STARTUP_LOADER_SAFEMODE の値を渡すことによって、shim にポリシー評価をスキップし、pwszVersionで指定された正確なバージョンを読み込むよう強制できます。

呼び出し元が pwszVersionに null を指定すると、ランタイムの最新バージョンが読み込まれます。 null を渡すと、どのバージョンのランタイムが読み込まれるかをホストが制御できなくなります。 一部のシナリオではこの方法が適している場合がありますが、ホストが読み込む特定のバージョンを提供することを強くお勧めします。

pwszBuildFlavor [in]サーバーを読み込むか、CLR のワークステーション ビルドを読み込むかを指定する文字列。 有効値は svr または wks です。 サーバー ビルドは、ガベージ コレクションに複数のプロセッサを利用するように最適化されており、ワークステーションのビルドは、単一プロセッサ コンピューターで実行されているクライアント アプリケーション用に最適化されています。

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

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

riid[in]rclsidから要求されたインターフェイスのIID。 サポートされている値は、IID_ICorRuntimeHostまたはIID_ICLRRuntimeHostです。

ppv [out] 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. プロセスの既定のモードをバージョン 1 互換モードに変更すると、現在のスレッドのExecutionContext設定に関係なく、WindowsIdentity オブジェクトが非同期ポイント間を流れることはありません。 既定のモードを変更する方法は、マネージド実行可能ファイルとアンマネージ ホスティング インターフェイスのどちらを使用して CLR を読み込むかによって異なります。

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

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

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

必要条件

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

ヘッダ: MSCorEE.h

ライブラリ: MSCorEE.dll

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

こちらも参照ください