#include "electronic_registration.h" #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #include #endif #include "game_config.h" #include "platform_compat.h" // 0x440DD0 void runElectronicRegistration() { int timesRun = 0; configGetInt(&gGameConfig, GAME_CONFIG_SYSTEM_KEY, GAME_CONFIG_TIMES_RUN_KEY, ×Run); if (timesRun > 0 && timesRun < 5) { #ifdef _WIN32 char path[COMPAT_MAX_PATH]; if (GetModuleFileNameA(NULL, path, sizeof(path)) != 0) { char* pch = strrchr(path, '\\'); if (pch == NULL) { pch = path; } strcpy(pch, "\\ereg"); STARTUPINFOA startupInfo; memset(&startupInfo, 0, sizeof(startupInfo)); startupInfo.cb = sizeof(startupInfo); PROCESS_INFORMATION processInfo; // FIXME: Leaking processInfo.hProcess and processInfo.hThread: // https://docs.microsoft.com/en-us/cpp/code-quality/c6335. if (CreateProcessA("ereg\\reg32a.exe", NULL, NULL, NULL, FALSE, 0, NULL, path, &startupInfo, &processInfo)) { WaitForSingleObject(processInfo.hProcess, INFINITE); } } #endif configSetInt(&gGameConfig, GAME_CONFIG_SYSTEM_KEY, GAME_CONFIG_TIMES_RUN_KEY, timesRun + 1); } else { if (timesRun == 0) { configSetInt(&gGameConfig, GAME_CONFIG_SYSTEM_KEY, GAME_CONFIG_TIMES_RUN_KEY, 1); } } }