Code:
#include "MSCorEE.h"
#include <windows.h>
#include <metahost.h>
#include <corerror.h>
#pragma once
using namespace System;
void CallLoad()
{
ICLRMetaHost *pMetaHost = NULL;
ICLRRuntimeInfo *pRuntimeInfo = NULL;
ICLRRuntimeHost *pClrHost = NULL;
HRESULT hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_PPV_ARGS(&pMetaHost)); // returns 0 (S_OK)
hr = pMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&pRuntimeInfo)); // returns 0 (S_OK)
hr = pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_PPV_ARGS(&pClrHost)); // returns 0 (S_OK)
hr = pClrHost->Start(); // returns 1 (S_FALSE), maybe because the Runtime is already running??
DWORD dwRet = 99;
hr = pClrHost->ExecuteInDefaultAppDomain(L"Absolute\\Path\\To\\FowlsHack.dll", L"FowlsHack.Loader", L"LoadHacks", L"", &dwRet); // returns -2146233078 (seems to be COR_E_SECURITY)
// dwRet is still 99
}
#pragma unmanaged
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
CallLoad();
return 0;
}
}
BOOL APIENTRY DllMain(HINSTANCE hinstDll, DWORD Reason, LPVOID Reserved)
{
switch (Reason){
case DLL_PROCESS_ATTACH:
CreateThread(0, NULL, ThreadProc, (LPVOID)L"", NULL, NULL);
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#pragma managed