| 56 | } |
| 57 | |
| 58 | void OsirisWrappers::Initialize() |
| 59 | { |
| 60 | Kernel32Module = LoadLibrary(L"kernel32.dll"); |
| 61 | if (Kernel32Module == NULL) { |
| 62 | Fail("Could not load kernel32.dll"); |
| 63 | } |
| 64 | |
| 65 | OsirisModule = LoadLibrary(L"osiris_x64.dll"); |
| 66 | if (OsirisModule == NULL) { |
| 67 | Fail("Could not load osiris_x64.dll"); |
| 68 | } |
| 69 | |
| 70 | MODULEINFO moduleInfo; |
| 71 | if (!GetModuleInformation(GetCurrentProcess(), OsirisModule, &moduleInfo, sizeof(moduleInfo))) { |
| 72 | Fail("Could not get module info of osiris_x64.dll"); |
| 73 | } |
| 74 | |
| 75 | OsirisDllStart = moduleInfo.lpBaseOfDll; |
| 76 | OsirisDllSize = moduleInfo.SizeOfImage; |
| 77 | |
| 78 | OriginalRuleActionCallProc = (RuleActionCallProc)FindRuleActionCallProc(); |
| 79 | if (!OriginalRuleActionCallProc) { |
| 80 | Fail("Could not locate RuleAction::Call in osiris_x64.dll"); |
| 81 | } |
| 82 | |
| 83 | FARPROC OsirisCtorProc = GetProcAddress(OsirisModule, "??0COsiris@@QEAA@XZ"); |
| 84 | if (OsirisCtorProc == NULL) { |
| 85 | Fail("Could not locate COsiris::COsiris() in osiris_x64.dll"); |
| 86 | } |
| 87 | |
| 88 | FindOsirisGlobals(OsirisCtorProc); |
| 89 | |
| 90 | FARPROC SetOptionProc = GetProcAddress(OsirisModule, "?SetOption@COsiris@@QEAAXI@Z"); |
| 91 | if (SetOptionProc == NULL) { |
| 92 | Fail("Could not locate COsiris::SetOption in osiris_x64.dll"); |
| 93 | } |
| 94 | |
| 95 | FindDebugFlags(SetOptionProc); |
| 96 | |
| 97 | #if 0 |
| 98 | Debug("OsirisWrappers::Initialize: Detouring functions"); |
| 99 | #endif |
| 100 | |
| 101 | DetourTransactionBegin(); |
| 102 | DetourUpdateThread(GetCurrentThread()); |
| 103 | |
| 104 | RegisterDivFunctions.Wrap(OsirisModule, "?RegisterDIVFunctions@COsiris@@QEAAXPEAUTOsirisInitFunction@@@Z"); |
| 105 | InitGame.Wrap(OsirisModule, "?InitGame@COsiris@@QEAA_NXZ"); |
| 106 | DeleteAllData.Wrap(OsirisModule, "?DeleteAllData@COsiris@@QEAAX_N@Z"); |
| 107 | GetFunctionMappings.Wrap(OsirisModule, "?GetFunctionMappings@COsiris@@QEAAXPEAPEAUMappingInfo@@PEAI@Z"); |
| 108 | OpenLogFile.Wrap(OsirisModule, "?OpenLogFile@COsiris@@QEAA_NPEB_W0@Z"); |
| 109 | CloseLogFile.Wrap(OsirisModule, "?CloseLogFile@COsiris@@QEAAXXZ"); |
| 110 | ReadHeader.Wrap(OsirisModule, "?_ReadHeader@COsiris@@IEAA_NAEAVCOsiSmartBuf@@AEAE111PEADAEAI@Z"); |
| 111 | Load.Wrap(OsirisModule, "?Load@COsiris@@QEAA_NAEAVCOsiSmartBuf@@@Z"); |
| 112 | Compile.Wrap(OsirisModule, "?Compile@COsiris@@QEAA_NPEB_W0@Z"); |
| 113 | Merge.Wrap(OsirisModule, "?Merge@COsiris@@QEAA_NPEB_W@Z"); |
| 114 | Event.Wrap(OsirisModule, "?Event@COsiris@@QEAA?AW4ReturnCode@osi@@IPEAVCOsiArgumentDesc@@@Z"); |
| 115 | RuleActionCall.Wrap(OriginalRuleActionCallProc); |