MCPcopy Index your code
hub / github.com/CCob/BOF.NET / loadCLR

Function loadCLR

bofs/bofnet_execute.cpp:216–272  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

214}
215
216ICorRuntimeHost* loadCLR(bool v4){
217
218 BOF_LOCAL(OLE32, CoInitializeEx);
219 BOF_LOCAL(OLE32, CoCreateInstance);
220 BOF_LOCAL(OLE32, CLSIDFromString);
221 BOF_LOCAL(KERNEL32, LoadLibraryA);
222
223 GUID IID_RTH, CLSID_RTH, IID_MH, CLSID_MH, CLSID_RH, IID_RH, IID_RHI;
224 HRESULT hr;
225 ICorRuntimeHost* result = nullptr;
226 ICLRMetaHost* pMetaHost = nullptr;
227 ICLRRuntimeInfo* pRuntimeInfo = nullptr;
228 ICLRRuntimeHost* pClrRuntimeHost = nullptr;
229 CLRCreateInstancePtr pCLRCreateInstance = nullptr;
230 HMODULE hMod = NULL;
231
232 CLSIDFromString(L"{cb2f6722-ab3a-11d2-9c40-00c04fa30a3e}", &IID_RTH);
233 CLSIDFromString(L"{cb2f6723-ab3a-11d2-9c40-00c04fa30a3e}", &CLSID_RTH);
234 CLSIDFromString(L"{d332db9e-b9b3-4125-8207-a14884f53216}", &IID_MH);
235 CLSIDFromString(L"{9280188D-0E8E-4867-B30C-7FA83884E8DE}", &CLSID_MH);
236 CLSIDFromString(L"{bd39d1d2-ba2f-486a-89b0-b4b0cb466891}", &IID_RHI);
237 CLSIDFromString(L"{90f1a06e-7712-4762-86b5-7a5eba6bdb02}", &CLSID_RH);
238 CLSIDFromString(L"{90f1a06c-7712-4762-86b5-7a5eba6bdb02}", &IID_RH);
239
240 if( (hMod = LoadLibraryA("mscoree.dll")) != NULL){
241 pCLRCreateInstance = (CLRCreateInstancePtr)GetProcAddress(hMod,"CLRCreateInstance");
242 if(pCLRCreateInstance == nullptr){
243 log("[=]Failed to get v2 ICorRuntimeHost: 0x%x, will try .NET 2 method", hr);
244 v4 = false;
245 }
246 }
247
248 hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
249
250 if(v4 && (hr = pCLRCreateInstance(CLSID_MH, IID_MH, (LPVOID*)&pMetaHost) == S_OK)){
251
252 if((hr = pMetaHost->GetRuntime(L"v4.0.30319", IID_RHI, (LPVOID*)&pRuntimeInfo)) == S_OK){
253 if((hr = pRuntimeInfo->GetInterface(CLSID_RH, IID_RH, (LPVOID*)&pClrRuntimeHost)) == S_OK){;
254 hr = pClrRuntimeHost->Start();
255 hr = pRuntimeInfo->GetInterface(CLSID_RTH, IID_RTH, (LPVOID *)&result);
256 }else{
257 log("Failed to get CLR runtime host: 0x%x", hr);
258 }
259 }else{
260 log("Failed to get v4 runtime info: 0x%x", hr);
261 }
262
263 }else{
264 if( (hr = CoCreateInstance(CLSID_RTH, nullptr, CLSCTX_ALL, IID_RTH,(LPVOID*)&result)) == S_OK){
265 hr = result->Start();
266 }else{
267 log("Failed to get v2 ICorRuntimeHost: 0x%x", hr);
268 }
269 }
270
271 return result;
272}
273

Callers 1

goFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected