Enables unmanaged hosts to load the common language runtime (CLR) into a process.
HRESULT CorBindToRuntime ( [in] LPCWSTR pwszVersion, [in] LPCWSTR pwszBuildFlavor, [in] REFCLSID rclsid, [in] REFIID riid, [out] LPVOID FAR *ppv );
If pwszVersion specifies a runtime version that does not exist, CorBindToRuntimeEx returns an HRESULT value of CLR_E_SHIM_RUNTIMELOAD.
Execution Context and Flow of Windows Identity
In version 1 of the CLR, the WindowsIdentity object does not flow across asynchronous points such as new threads, thread pools, or timer callbacks. In version 2.0 of the CLR, an ExecutionContext object wraps some information about the currently executing thread and flows it across any asynchronous point, but not across application domain boundaries. Similarly, the WindowsIdentity object also flows across any asynchronous point. Therefore, the current impersonation on the thread, if any, flows too.
You can alter the flow in two ways:
By changing the process default mode to the version 1 compatibility mode, where the WindowsIdentity object does not flow across any asynchronous point, regardless of the ExecutionContext settings on the current thread. How you change the default mode depends on whether you use a managed executable or an unmanaged hosting interface to load the CLR:
For managed executables, you must set the enabled attribute of the <legacyImpersonationPolicy> element to true.
For unmanaged hosting interfaces, set the STARTUP_LEGACY_IMPERSONATION flag in the flags parameter when calling the CorBindToRuntimeEx function.
The version 1 compatibility mode applies to the entire process and to all the application domains in the process.
CorBindToRuntimeEx and CorBindToRuntime perform the same operation, but the CorBindToRuntimeEx function allows you to set flags to specify the behavior of the CLR.