static void dllmainProcAttach(char *procname) { Mutex::init(); char *p = strrchr(procname, '\\'); if (!p) { // No blacklisting if the file has no path } else if (GetProcAddress(NULL, "mumbleSelfDetection") != NULL) { ods("Lib: Attached to overlay helper or Mumble process. Blacklisted - no overlay injection."); bBlackListed = TRUE; bMumble = TRUE; } else { if (dllmainProcAttachCheckProcessIsBlacklisted(procname, p)) { ods("Lib: Process %s is blacklisted - no overlay injection.", procname); return; } } OSVERSIONINFOEX ovi; memset(&ovi, 0, sizeof(ovi)); ovi.dwOSVersionInfoSize = sizeof(ovi); GetVersionEx(reinterpret_cast<OSVERSIONINFO *>(&ovi)); bIsWin8 = (ovi.dwMajorVersion >= 7) || ((ovi.dwMajorVersion == 6) && (ovi.dwBuildNumber >= 9200)); ods("Lib: bIsWin8: %i", bIsWin8); hHookMutex = CreateMutex(NULL, false, "MumbleHookMutex"); if (hHookMutex == NULL) { ods("Lib: CreateMutex failed"); return; } if(!createSharedDataMap()) return; if (! bMumble) { // Hook our own LoadLibrary functions so we notice when a new library (like the d3d ones) is loaded. hhLoad.setup(reinterpret_cast<voidFunc>(LoadLibraryA), reinterpret_cast<voidFunc>(MyLoadLibrary)); hhLoadW.setup(reinterpret_cast<voidFunc>(LoadLibraryW), reinterpret_cast<voidFunc>(MyLoadLibraryW)); checkHooks(true); ods("Lib: Injected into %s", procname); } }
static void HookResizeRaw(voidFunc vfResize) { ods("DXGI: Injecting ResizeBuffers Raw"); hhResize.setup(vfResize, reinterpret_cast<voidFunc>(myResize)); }
static void HookPresentRaw(voidFunc vfPresent) { ods("DXGI: Injecting Present"); hhPresent.setup(vfPresent, reinterpret_cast<voidFunc>(myPresent)); }
static void HookCreateRawEx(voidFunc vfCreate) { ods("D3D9: Injecting CreateDeviceEx Raw"); hhCreateDeviceEx.setup(vfCreate, reinterpret_cast<voidFunc>(myCreateDeviceEx)); }
static void HookAddRelease(voidFunc vfAdd, voidFunc vfRelease) { ods("D3D10: Injecting device add/remove"); hhAddRef.setup(vfAdd, reinterpret_cast<voidFunc>(myAddRef)); hhRelease.setup(vfRelease, reinterpret_cast<voidFunc>(myRelease)); }
static void HookPresentRaw(voidFunc vfPresent) { hhPresent.setup(vfPresent, reinterpret_cast<voidFunc>(myPresent)); }