BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { UNREFERENCED_PARAMETER(lpReserved); if (NULL == GetModuleHandleA("YDTrigger.dll")) return TRUE; if (!check()) return TRUE; switch(ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: { DisableThreadLibraryCalls(hModule); Detoured_Init(hModule); SetDllPath(hModule); GUIID_Table_Create(); GUIID_Table_Init(); All_Hook(); } break; case DLL_PROCESS_DETACH: case DLL_THREAD_DETACH: { All_Unhook(); GUIID_Table_Destory(); } break; } return TRUE; }
bool CGCServiceApp::start(int argc, char** argv) { DeleteFile("desura_service_old.exe"); std::string wdir; for (size_t x=0; x<(size_t)argc; x++) { if (argv[x] && std::string(argv[x]) == "-wdir") { if (x+1 <= (size_t)argc && argv[x+1]) wdir = argv[x+1]; } } if (!SetDllPath(wdir.size()?wdir.c_str():NULL)) { log("Failed to set dll path. :(\n"); return false; } DeleteFile("desura_service_old.exe"); DeleteFile("desura_old.exe"); #if !defined(DEBUG) && defined(DESURA_OFFICIAL_BUILD) char message[255] = {0}; if (ValidateCert(L".\\bin\\servicecore.dll", message, 255) != ERROR_SUCCESS) { log("Failed cert check on servicecore.dll: "); log(message); log("\n"); return false; } #endif if (!m_SCDLL.load("servicecore.dll")) { log("Failed to load servicecore.dll.\n"); return false; } FactoryBuilderFN factory = m_SCDLL.getFunction<FactoryBuilderFN>("FactoryBuilderSC"); if (!factory) { log("Failed to load FactoryBuilderSC function.\n"); return false; } m_pServiceCore = (ServiceCoreI*)factory(SERVICE_CORE); if (!m_pServiceCore) { log("Failed to create service core.\n"); return false; } m_pServiceCore->setDisconnectCallback(&OnPipeDisconnect); m_pServiceCore->setCrashSettingCallback(&SetCrashSettings); m_pServiceCore->startPipe(); return true; }