From c0e8e576df16171da6f0e68cbfa18123e8d1e7e0 Mon Sep 17 00:00:00 2001 From: pg9182 <96569817+pg9182@users.noreply.github.com> Date: Mon, 8 Aug 2022 06:12:11 -0400 Subject: Fix most clang/mingw issues (#226) - Fix include case. - Replace MSVC-specific align with standard alignas. - Type fixes. - Delete operator noexcept. - A few other minor issues. - clang-format everything. - Use c++20 instead of c++17. - Rewrite ERROR macro for launcher_wsock32_proxy. - Use a plain ifstream for the audio.cpp wavStream. Note: When compiling with clang, you'll need -municode. Related to #212. --- LauncherInjector/LauncherInjector.vcxproj | 4 +- LauncherInjector/main.cpp | 10 +- NorthstarDedicatedTest/ExploitFixes.cpp | 8 +- NorthstarDedicatedTest/NSMem.h | 6 +- .../NorthstarDedicatedTest.vcxproj | 4 +- NorthstarDedicatedTest/audio.cpp | 10 +- NorthstarDedicatedTest/bansystem.cpp | 3 +- NorthstarDedicatedTest/clientvideooverrides.cpp | 7 +- NorthstarDedicatedTest/convar.cpp | 2 + NorthstarDedicatedTest/dedicatedmaterialsystem.cpp | 3 +- NorthstarDedicatedTest/dllmain.cpp | 6 +- NorthstarDedicatedTest/filesystem.cpp | 16 +- NorthstarDedicatedTest/hooks.cpp | 16 +- NorthstarDedicatedTest/hookutils.h | 3 +- NorthstarDedicatedTest/logging.cpp | 5 +- NorthstarDedicatedTest/masterserver.h | 4 +- NorthstarDedicatedTest/maxplayers.cpp | 6 +- NorthstarDedicatedTest/memalloc.cpp | 4 +- NorthstarDedicatedTest/memalloc.h | 2 +- NorthstarDedicatedTest/pch.h | 4 +- NorthstarDedicatedTest/rpakfilesystem.cpp | 16 +- NorthstarDedicatedTest/serverchathooks.cpp | 2 +- NorthstarDedicatedTest/sourceinterface.cpp | 8 +- NorthstarDedicatedTest/squirrel.cpp | 4 +- NorthstarDedicatedTest/squirrel.h | 2 +- loader_launcher_proxy/Memory.cpp | 11 +- loader_launcher_proxy/Memory.h | 36 ++-- loader_launcher_proxy/dllmain.cpp | 229 +++++++++++---------- loader_launcher_proxy/framework.h | 4 +- .../loader_launcher_proxy.vcxproj | 4 +- loader_launcher_proxy/pch.h | 2 +- loader_wsock32_proxy/dllmain.cpp | 64 ++++-- loader_wsock32_proxy/hookutils.cpp | 91 ++++---- loader_wsock32_proxy/loader.cpp | 32 ++- loader_wsock32_proxy/loader_wsock32_proxy.vcxproj | 4 +- loader_wsock32_proxy/pch.h | 4 +- 36 files changed, 363 insertions(+), 273 deletions(-) diff --git a/LauncherInjector/LauncherInjector.vcxproj b/LauncherInjector/LauncherInjector.vcxproj index 8870c732..ae49b165 100644 --- a/LauncherInjector/LauncherInjector.vcxproj +++ b/LauncherInjector/LauncherInjector.vcxproj @@ -56,7 +56,7 @@ true _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - stdcpp17 + stdcpp20 /F8000000 %(AdditionalOptions) @@ -74,7 +74,7 @@ true NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true - stdcpp17 + stdcpp20 /F8000000 %(AdditionalOptions) diff --git a/LauncherInjector/main.cpp b/LauncherInjector/main.cpp index 04aadf03..1311759d 100644 --- a/LauncherInjector/main.cpp +++ b/LauncherInjector/main.cpp @@ -1,10 +1,10 @@ #define WIN32_LEAN_AND_MEAN -#include -#include +#include +#include #include #include #include -#include +#include #include namespace fs = std::filesystem; @@ -225,7 +225,7 @@ bool ShouldLoadNorthstar(int argc, char* argv[]) std::stringstream runNorthstarFileBuffer; runNorthstarFileBuffer << runNorthstarFile.rdbuf(); runNorthstarFile.close(); - if (runNorthstarFileBuffer.str()._Starts_with("0")) + if (runNorthstarFileBuffer.str().starts_with("0")) loadNorthstar = false; } return loadNorthstar; @@ -236,7 +236,7 @@ bool LoadNorthstar() FARPROC Hook_Init = nullptr; { swprintf_s(buffer, L"%s\\Northstar.dll", exePath); - hHookModule = LoadLibraryExW(buffer, 0i64, 8u); + hHookModule = LoadLibraryExW(buffer, 0, 8u); if (hHookModule) Hook_Init = GetProcAddress(hHookModule, "InitialiseNorthstar"); if (!hHookModule || Hook_Init == nullptr) diff --git a/NorthstarDedicatedTest/ExploitFixes.cpp b/NorthstarDedicatedTest/ExploitFixes.cpp index 2f4e2b5c..31fa349a 100644 --- a/NorthstarDedicatedTest/ExploitFixes.cpp +++ b/NorthstarDedicatedTest/ExploitFixes.cpp @@ -204,7 +204,7 @@ KHOOK(ReadUsercmd, ("server.dll", "4C 89 44 24 ? 53 55 56 57"), void, __fastcall oReadUsercmd(buf, pCmd_move, pCmd_from); // Now let's make sure the CMD we read isnt messed up to prevent numerous exploits (including server crashing) - struct __declspec(align(4)) SV_CUserCmd + struct alignas(4) SV_CUserCmd { DWORD command_number; DWORD tick_count; @@ -291,7 +291,11 @@ KHOOK( static void* targetRetAddr = NSMem::PatternScan("engine.dll", "84 C0 75 2C 49 8B 16"); +#ifdef _MSC_VER if (_ReturnAddress() == targetRetAddr) +#else + if (__builtin_return_address(0) == targetRetAddr) +#endif { if (!ExploitFixes_UTF8Parser::CheckValid(a1, a2, strData)) { @@ -546,4 +550,4 @@ void ExploitFixes::LoadCallback_Full(HMODULE baseAddress) HookEnabler hook; ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0x2a8a50, &GetEntByIndexHook, reinterpret_cast(&GetEntByIndex)); -} \ No newline at end of file +} diff --git a/NorthstarDedicatedTest/NSMem.h b/NorthstarDedicatedTest/NSMem.h index 84bb93db..9b1f9103 100644 --- a/NorthstarDedicatedTest/NSMem.h +++ b/NorthstarDedicatedTest/NSMem.h @@ -44,7 +44,7 @@ namespace NSMem } else { - assert(false, "Failed to parse invalid hex string."); + assert(false); val = -1; } @@ -188,6 +188,6 @@ struct KHook #define KHOOK(name, funcPatternInfo, returnType, convention, args) \ returnType convention hk##name args; \ auto o##name = (returnType(convention*) args)0; \ - KHook k##name = KHook(KHookPatternInfo funcPatternInfo, &hk##name, (void**)&o##name); \ + KHook k##name = KHook(KHookPatternInfo funcPatternInfo, reinterpret_cast(&hk##name), (void**)&o##name); \ returnType convention hk##name args -#pragma endregion \ No newline at end of file +#pragma endregion diff --git a/NorthstarDedicatedTest/NorthstarDedicatedTest.vcxproj b/NorthstarDedicatedTest/NorthstarDedicatedTest.vcxproj index ff6ca2ea..50f8a865 100644 --- a/NorthstarDedicatedTest/NorthstarDedicatedTest.vcxproj +++ b/NorthstarDedicatedTest/NorthstarDedicatedTest.vcxproj @@ -59,7 +59,7 @@ true Use pch.h - stdcpp17 + stdcpp20 $(ProjectDir)include;%(AdditionalIncludeDirectories) @@ -86,7 +86,7 @@ true Use pch.h - stdcpp17 + stdcpp20 $(ProjectDir)include;%(AdditionalIncludeDirectories) MultiThreadedDLL diff --git a/NorthstarDedicatedTest/audio.cpp b/NorthstarDedicatedTest/audio.cpp index 0b65670f..ed30d01b 100644 --- a/NorthstarDedicatedTest/audio.cpp +++ b/NorthstarDedicatedTest/audio.cpp @@ -194,7 +194,7 @@ EventOverrideData::EventOverrideData(const std::string& data, const fs::path& pa std::string pathString = file.path().string(); // Open the file. - std::basic_ifstream wavStream(pathString, std::ios::binary); + std::ifstream wavStream(pathString, std::ios::binary); if (wavStream.fail()) { @@ -219,7 +219,7 @@ EventOverrideData::EventOverrideData(const std::string& data, const fs::path& pa [pathString, fileSize, data] { std::shared_lock lock(g_CustomAudioManager.m_loadingMutex); - std::basic_ifstream wavStream(pathString, std::ios::binary); + std::ifstream wavStream(pathString, std::ios::binary); // would be weird if this got hit, since it would've worked previously if (wavStream.fail()) @@ -230,9 +230,9 @@ EventOverrideData::EventOverrideData(const std::string& data, const fs::path& pa // read from after the header first to preserve the empty header, then read the header last wavStream.seekg(sizeof(EMPTY_WAVE), std::ios::beg); - wavStream.read(&data[sizeof(EMPTY_WAVE)], fileSize - sizeof(EMPTY_WAVE)); + wavStream.read(reinterpret_cast(&data[sizeof(EMPTY_WAVE)]), fileSize - sizeof(EMPTY_WAVE)); wavStream.seekg(0, std::ios::beg); - wavStream.read(data, sizeof(EMPTY_WAVE)); + wavStream.read(reinterpret_cast(data), sizeof(EMPTY_WAVE)); wavStream.close(); spdlog::info("Finished async read of audio sample {}", pathString); @@ -512,4 +512,4 @@ void InitialiseMilesAudioHooks(HMODULE baseAddress) ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0x57DAD0, &MilesLog_Hook, reinterpret_cast(&MilesLog_Original)); MilesStopAll = (MilesStopAll_Type)((char*)baseAddress + 0x580850); -} \ No newline at end of file +} diff --git a/NorthstarDedicatedTest/bansystem.cpp b/NorthstarDedicatedTest/bansystem.cpp index 9c2507fd..9333d844 100644 --- a/NorthstarDedicatedTest/bansystem.cpp +++ b/NorthstarDedicatedTest/bansystem.cpp @@ -1,4 +1,3 @@ -#pragma once #include "pch.h" #include "bansystem.h" #include "serverauthentication.h" @@ -103,4 +102,4 @@ void InitialiseBanSystem(HMODULE baseAddress) RegisterConCommand("ban", BanPlayerCommand, "bans a given player by uid or name", FCVAR_GAMEDLL); RegisterConCommand("unban", UnbanPlayerCommand, "unbans a given player by uid", FCVAR_NONE); RegisterConCommand("clearbanlist", ClearBanlistCommand, "clears all uids on the banlist", FCVAR_NONE); -} \ No newline at end of file +} diff --git a/NorthstarDedicatedTest/clientvideooverrides.cpp b/NorthstarDedicatedTest/clientvideooverrides.cpp index d5674f51..c5989968 100644 --- a/NorthstarDedicatedTest/clientvideooverrides.cpp +++ b/NorthstarDedicatedTest/clientvideooverrides.cpp @@ -35,5 +35,8 @@ void InitialiseClientVideoOverrides(HMODULE baseAddress) { HookEnabler hook; ENABLER_CREATEHOOK( - hook, GetProcAddress(GetModuleHandleA("bink2w64.dll"), "BinkOpen"), &BinkOpenHook, reinterpret_cast(&BinkOpen)); -} \ No newline at end of file + hook, + reinterpret_cast(GetProcAddress(GetModuleHandleA("bink2w64.dll"), "BinkOpen")), + &BinkOpenHook, + reinterpret_cast(&BinkOpen)); +} diff --git a/NorthstarDedicatedTest/convar.cpp b/NorthstarDedicatedTest/convar.cpp index 346e7b69..bf8edbf9 100644 --- a/NorthstarDedicatedTest/convar.cpp +++ b/NorthstarDedicatedTest/convar.cpp @@ -1,3 +1,5 @@ +#include + #include "pch.h" #include "bits.h" #include "cvar.h" diff --git a/NorthstarDedicatedTest/dedicatedmaterialsystem.cpp b/NorthstarDedicatedTest/dedicatedmaterialsystem.cpp index f1a91e22..01197407 100644 --- a/NorthstarDedicatedTest/dedicatedmaterialsystem.cpp +++ b/NorthstarDedicatedTest/dedicatedmaterialsystem.cpp @@ -1,4 +1,3 @@ -#pragma once #include "pch.h" #include "dedicated.h" #include "dedicatedmaterialsystem.h" @@ -120,4 +119,4 @@ void InitialiseDedicatedRtechGame(HMODULE baseAddress) // unfortunately this is unstable, seems to freeze when changing maps // ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0xB0F0, &PakLoadAPI__LoadRpakHook, reinterpret_cast(&PakLoadAPI__LoadRpak)); // ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0xB170, &PakLoadAPI__LoadRpak2Hook, reinterpret_cast(&PakLoadAPI__LoadRpak2)); -} \ No newline at end of file +} diff --git a/NorthstarDedicatedTest/dllmain.cpp b/NorthstarDedicatedTest/dllmain.cpp index d64cc34f..6d32034f 100644 --- a/NorthstarDedicatedTest/dllmain.cpp +++ b/NorthstarDedicatedTest/dllmain.cpp @@ -53,7 +53,7 @@ #include "rapidjson/error/en.h" #include "ExploitFixes.h" -typedef void (*initPluginFuncPtr)(void* getPluginObject); +typedef void (*initPluginFuncPtr)(void* (*getPluginObject)(PluginObject)); bool initialised = false; @@ -128,7 +128,7 @@ bool LoadPlugins() spdlog::info("Failed to load library {}: ", std::system_category().message(GetLastError())); continue; } - HRSRC manifestResource = FindResourceW(datafile, MAKEINTRESOURCE(101), MAKEINTRESOURCE(RT_RCDATA)); + HRSRC manifestResource = FindResourceW(datafile, MAKEINTRESOURCEW(101), MAKEINTRESOURCEW(RT_RCDATA)); if (manifestResource == NULL) { @@ -302,4 +302,4 @@ bool InitialiseNorthstar() CallAllPendingDLLLoadCallbacks(); return true; -} \ No newline at end of file +} diff --git a/NorthstarDedicatedTest/filesystem.cpp b/NorthstarDedicatedTest/filesystem.cpp index 702141bb..c17d813f 100644 --- a/NorthstarDedicatedTest/filesystem.cpp +++ b/NorthstarDedicatedTest/filesystem.cpp @@ -41,11 +41,19 @@ void InitialiseFilesystem(HMODULE baseAddress) // create hooks HookEnabler hook; ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0x5CBA0, &ReadFileFromVPKHook, reinterpret_cast(&readFileFromVPK)); - ENABLER_CREATEHOOK(hook, (*g_Filesystem)->m_vtable->ReadFromCache, &ReadFromCacheHook, reinterpret_cast(&readFromCache)); ENABLER_CREATEHOOK( - hook, (*g_Filesystem)->m_vtable->AddSearchPath, &AddSearchPathHook, reinterpret_cast(&addSearchPathOriginal)); + hook, + reinterpret_cast((*g_Filesystem)->m_vtable->ReadFromCache), + &ReadFromCacheHook, + reinterpret_cast(&readFromCache)); + ENABLER_CREATEHOOK( + hook, + reinterpret_cast((*g_Filesystem)->m_vtable->AddSearchPath), + &AddSearchPathHook, + reinterpret_cast(&addSearchPathOriginal)); ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0x15F20, &ReadFileFromFilesystemHook, reinterpret_cast(&readFileFromFilesystem)); - ENABLER_CREATEHOOK(hook, (*g_Filesystem)->m_vtable->MountVPK, &MountVPKHook, reinterpret_cast(&mountVPK)); + ENABLER_CREATEHOOK( + hook, reinterpret_cast((*g_Filesystem)->m_vtable->MountVPK), &MountVPKHook, reinterpret_cast(&mountVPK)); } std::string ReadVPKFile(const char* path) @@ -194,4 +202,4 @@ VPKData* MountVPKHook(IFileSystem* fileSystem, const char* vpkPath) } return ret; -} \ No newline at end of file +} diff --git a/NorthstarDedicatedTest/hooks.cpp b/NorthstarDedicatedTest/hooks.cpp index cc99341a..64099f48 100644 --- a/NorthstarDedicatedTest/hooks.cpp +++ b/NorthstarDedicatedTest/hooks.cpp @@ -10,7 +10,6 @@ #include #include #include -#include typedef LPSTR (*GetCommandLineAType)(); LPSTR GetCommandLineAHook(); @@ -39,11 +38,14 @@ void InstallInitialHooks() spdlog::error("MH_Initialize (minhook initialization) failed"); HookEnabler hook; - ENABLER_CREATEHOOK(hook, &GetCommandLineA, &GetCommandLineAHook, reinterpret_cast(&GetCommandLineAOriginal)); - ENABLER_CREATEHOOK(hook, &LoadLibraryExA, &LoadLibraryExAHook, reinterpret_cast(&LoadLibraryExAOriginal)); - ENABLER_CREATEHOOK(hook, &LoadLibraryA, &LoadLibraryAHook, reinterpret_cast(&LoadLibraryAOriginal)); - ENABLER_CREATEHOOK(hook, &LoadLibraryExW, &LoadLibraryExWHook, reinterpret_cast(&LoadLibraryExWOriginal)); - ENABLER_CREATEHOOK(hook, &LoadLibraryW, &LoadLibraryWHook, reinterpret_cast(&LoadLibraryWOriginal)); + ENABLER_CREATEHOOK( + hook, reinterpret_cast(&GetCommandLineA), &GetCommandLineAHook, reinterpret_cast(&GetCommandLineAOriginal)); + ENABLER_CREATEHOOK( + hook, reinterpret_cast(&LoadLibraryExA), &LoadLibraryExAHook, reinterpret_cast(&LoadLibraryExAOriginal)); + ENABLER_CREATEHOOK(hook, reinterpret_cast(&LoadLibraryA), &LoadLibraryAHook, reinterpret_cast(&LoadLibraryAOriginal)); + ENABLER_CREATEHOOK( + hook, reinterpret_cast(&LoadLibraryExW), &LoadLibraryExWHook, reinterpret_cast(&LoadLibraryExWOriginal)); + ENABLER_CREATEHOOK(hook, reinterpret_cast(&LoadLibraryW), &LoadLibraryWHook, reinterpret_cast(&LoadLibraryWOriginal)); } LPSTR GetCommandLineAHook() @@ -252,4 +254,4 @@ HMODULE LoadLibraryWHook(LPCWSTR lpLibFileName) } return moduleAddress; -} \ No newline at end of file +} diff --git a/NorthstarDedicatedTest/hookutils.h b/NorthstarDedicatedTest/hookutils.h index 47ec12bf..d0473d69 100644 --- a/NorthstarDedicatedTest/hookutils.h +++ b/NorthstarDedicatedTest/hookutils.h @@ -19,4 +19,5 @@ class HookEnabler }; // macro to call HookEnabler::CreateHook with the hook's name -#define ENABLER_CREATEHOOK(enabler, ppTarget, ppDetour, ppOriginal) enabler.CreateHook(ppTarget, ppDetour, ppOriginal, #ppDetour) \ No newline at end of file +#define ENABLER_CREATEHOOK(enabler, ppTarget, ppDetour, ppOriginal) \ + enabler.CreateHook(ppTarget, reinterpret_cast(ppDetour), ppOriginal, #ppDetour) diff --git a/NorthstarDedicatedTest/logging.cpp b/NorthstarDedicatedTest/logging.cpp index 5936007f..8b752637 100644 --- a/NorthstarDedicatedTest/logging.cpp +++ b/NorthstarDedicatedTest/logging.cpp @@ -7,9 +7,8 @@ #include "convar.h" #include #include -#include -#include #include "configurables.h" +#include // This needs to be called after hooks are loaded so we can access the command line args void CreateLogFiles() @@ -484,4 +483,4 @@ void InitialiseClientPrintHooks(HMODULE baseAddress) ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0x198710, TextMsgHook, reinterpret_cast(&TextMsg_Original)); Cvar_cl_showtextmsg = new ConVar("cl_showtextmsg", "1", FCVAR_NONE, "Enable/disable text messages printing on the screen."); -} \ No newline at end of file +} diff --git a/NorthstarDedicatedTest/masterserver.h b/NorthstarDedicatedTest/masterserver.h index 8dd42d77..e4dcb954 100644 --- a/NorthstarDedicatedTest/masterserver.h +++ b/NorthstarDedicatedTest/masterserver.h @@ -1,6 +1,6 @@ #pragma once #include "convar.h" -#include +#include #include #include struct RemoteModInfo @@ -132,4 +132,4 @@ void InitialiseSharedMasterServer(HMODULE baseAddress); extern MasterServerManager* g_MasterServerManager; extern ConVar* Cvar_ns_masterserver_hostname; -extern ConVar* Cvar_ns_server_password; \ No newline at end of file +extern ConVar* Cvar_ns_server_password; diff --git a/NorthstarDedicatedTest/maxplayers.cpp b/NorthstarDedicatedTest/maxplayers.cpp index 32f3b2ec..556819f1 100644 --- a/NorthstarDedicatedTest/maxplayers.cpp +++ b/NorthstarDedicatedTest/maxplayers.cpp @@ -212,7 +212,7 @@ void RunUserCmds_Hook(bool a1, float a2) v3 = *(unsigned char*)(g_pGlobals + 73); if (*(DWORD*)(qword_1814D9648 + 92) && - ((*(unsigned __int8(__fastcall**)(__int64))(*(__int64*)g_pEngineServer + 32i64))(g_pEngineServer) || + ((*(unsigned __int8(__fastcall**)(__int64))(*(__int64*)g_pEngineServer + 32))(g_pEngineServer) || !*(DWORD*)(qword_1814DA408 + 92)) && v3) { @@ -282,7 +282,7 @@ void RunUserCmds_Hook(bool a1, float a2) if (v23) v19 = 1; else - *v21 = 0i64; + *v21 = 0; } ++v20; ++v21; @@ -679,4 +679,4 @@ void InitialiseMaxPlayersOverride_Client(HMODULE baseAddress) *(DWORD*)((char*)baseAddress + 0xC3AFF8) = 0; auto DT_Team_Construct = (__int64(__fastcall*)())((char*)baseAddress + 0x17F950); DT_Team_Construct(); -} \ No newline at end of file +} diff --git a/NorthstarDedicatedTest/memalloc.cpp b/NorthstarDedicatedTest/memalloc.cpp index 4ba54c73..e2240269 100644 --- a/NorthstarDedicatedTest/memalloc.cpp +++ b/NorthstarDedicatedTest/memalloc.cpp @@ -70,7 +70,7 @@ void* operator new(size_t n) return _malloc_base(n); } -void operator delete(void* p) +void operator delete(void* p) noexcept { _free_base(p); -} // /FORCE:MULTIPLE \ No newline at end of file +} // /FORCE:MULTIPLE diff --git a/NorthstarDedicatedTest/memalloc.h b/NorthstarDedicatedTest/memalloc.h index a1b16ad4..fdd6474b 100644 --- a/NorthstarDedicatedTest/memalloc.h +++ b/NorthstarDedicatedTest/memalloc.h @@ -11,7 +11,7 @@ extern "C" void _free_base(void* const block); extern "C" char* _strdup_base(const char* src); void* operator new(size_t n); -void operator delete(void* p); +void operator delete(void* p) noexcept; // void* malloc(size_t n); diff --git a/NorthstarDedicatedTest/pch.h b/NorthstarDedicatedTest/pch.h index 1955071c..75737a44 100644 --- a/NorthstarDedicatedTest/pch.h +++ b/NorthstarDedicatedTest/pch.h @@ -13,8 +13,8 @@ // add headers that you want to pre-compile here #include "memalloc.h" -#include -#include +#include +#include #include #include #include diff --git a/NorthstarDedicatedTest/rpakfilesystem.cpp b/NorthstarDedicatedTest/rpakfilesystem.cpp index 1a4736a9..cb069b56 100644 --- a/NorthstarDedicatedTest/rpakfilesystem.cpp +++ b/NorthstarDedicatedTest/rpakfilesystem.cpp @@ -299,9 +299,15 @@ void InitialiseEngineRpakFilesystem(HMODULE baseAddress) pUnknownPakLoadSingleton = (void**)((char*)baseAddress + 0x7C5E20); HookEnabler hook; - ENABLER_CREATEHOOK(hook, g_pakLoadApi->LoadPakSync, &LoadPakSyncHook, reinterpret_cast(&LoadPakSyncOriginal)); - ENABLER_CREATEHOOK(hook, g_pakLoadApi->LoadPakAsync, &LoadPakAsyncHook, reinterpret_cast(&LoadPakAsyncOriginal)); - ENABLER_CREATEHOOK(hook, g_pakLoadApi->UnloadPak, &UnloadPakHook, reinterpret_cast(&UnloadPakOriginal)); ENABLER_CREATEHOOK( - hook, g_pakLoadApi->ReadFullFileFromDisk, &ReadFullFileFromDiskHook, reinterpret_cast(&ReadFullFileFromDiskOriginal)); -} \ No newline at end of file + hook, reinterpret_cast(g_pakLoadApi->LoadPakSync), &LoadPakSyncHook, reinterpret_cast(&LoadPakSyncOriginal)); + ENABLER_CREATEHOOK( + hook, reinterpret_cast(g_pakLoadApi->LoadPakAsync), &LoadPakAsyncHook, reinterpret_cast(&LoadPakAsyncOriginal)); + ENABLER_CREATEHOOK( + hook, reinterpret_cast(g_pakLoadApi->UnloadPak), &UnloadPakHook, reinterpret_cast(&UnloadPakOriginal)); + ENABLER_CREATEHOOK( + hook, + reinterpret_cast(g_pakLoadApi->ReadFullFileFromDisk), + &ReadFullFileFromDiskHook, + reinterpret_cast(&ReadFullFileFromDiskOriginal)); +} diff --git a/NorthstarDedicatedTest/serverchathooks.cpp b/NorthstarDedicatedTest/serverchathooks.cpp index 985d3d1b..2f5be5c1 100644 --- a/NorthstarDedicatedTest/serverchathooks.cpp +++ b/NorthstarDedicatedTest/serverchathooks.cpp @@ -194,7 +194,7 @@ void InitialiseServerChatHooks_Server(HMODULE baseAddress) HookEnabler hook; ENABLER_CREATEHOOK( hook, - CServerGameDLL__OnReceivedSayTextMessage, + reinterpret_cast(CServerGameDLL__OnReceivedSayTextMessage), &CServerGameDLL__OnReceivedSayTextMessageHook, reinterpret_cast(&CServerGameDLL__OnReceivedSayTextMessageHookBase)); diff --git a/NorthstarDedicatedTest/sourceinterface.cpp b/NorthstarDedicatedTest/sourceinterface.cpp index 2cc4733d..56020e5e 100644 --- a/NorthstarDedicatedTest/sourceinterface.cpp +++ b/NorthstarDedicatedTest/sourceinterface.cpp @@ -47,7 +47,7 @@ void HookClientCreateInterface(HMODULE baseAddress) HookEnabler hook; ENABLER_CREATEHOOK( hook, - GetProcAddress(baseAddress, "CreateInterface"), + reinterpret_cast(GetProcAddress(baseAddress, "CreateInterface")), &ClientCreateInterfaceHook, reinterpret_cast(&clientCreateInterfaceOriginal)); } @@ -57,7 +57,7 @@ void HookServerCreateInterface(HMODULE baseAddress) HookEnabler hook; ENABLER_CREATEHOOK( hook, - GetProcAddress(baseAddress, "CreateInterface"), + reinterpret_cast(GetProcAddress(baseAddress, "CreateInterface")), &ServerCreateInterfaceHook, reinterpret_cast(&serverCreateInterfaceOriginal)); } @@ -67,7 +67,7 @@ void HookEngineCreateInterface(HMODULE baseAddress) HookEnabler hook; ENABLER_CREATEHOOK( hook, - GetProcAddress(baseAddress, "CreateInterface"), + reinterpret_cast(GetProcAddress(baseAddress, "CreateInterface")), &EngineCreateInterfaceHook, reinterpret_cast(&engineCreateInterfaceOriginal)); } @@ -79,4 +79,4 @@ void InitialiseInterfaceCreationHooks() // not used atm // AddDllLoadCallback("server.dll", HookServerCreateInterface); // AddDllLoadCallback("engine.dll", HookEngineCreateInterface); -} \ No newline at end of file +} diff --git a/NorthstarDedicatedTest/squirrel.cpp b/NorthstarDedicatedTest/squirrel.cpp index a0680d9a..9386c767 100644 --- a/NorthstarDedicatedTest/squirrel.cpp +++ b/NorthstarDedicatedTest/squirrel.cpp @@ -491,7 +491,7 @@ template int64_t RegisterSquirrelFuncHook(void* sqvm, SQ if ((funcReg->devLevel == 1) && (!CommandLine()->CheckParm("-allowSquirrelDevFunctions")) && (!allowedDevFunctions.count(funcReg->squirrelFuncName))) - funcReg->funcPtr = SQ_DevFuncStub; + funcReg->funcPtr = reinterpret_cast(SQ_DevFuncStub); if (context == ScriptContext::SERVER) return ServerRegisterSquirrelFunc(sqvm, funcReg, unknown); @@ -521,4 +521,4 @@ SQReturnTypeEnum GetReturnTypeEnumFromString(const char* returnTypeString) { return SqReturnDefault; // previous default value } -} \ No newline at end of file +} diff --git a/NorthstarDedicatedTest/squirrel.h b/NorthstarDedicatedTest/squirrel.h index 0e49c7f8..397fa9ed 100644 --- a/NorthstarDedicatedTest/squirrel.h +++ b/NorthstarDedicatedTest/squirrel.h @@ -323,7 +323,7 @@ template class SquirrelManager reg->argTypes = new char[argTypes.size() + 1]; strcpy((char*)reg->argTypes, argTypes.c_str()); - reg->funcPtr = func; + reg->funcPtr = reinterpret_cast(func); m_funcRegistrations.push_back(reg); } diff --git a/loader_launcher_proxy/Memory.cpp b/loader_launcher_proxy/Memory.cpp index 200246eb..344fa834 100644 --- a/loader_launcher_proxy/Memory.cpp +++ b/loader_launcher_proxy/Memory.cpp @@ -1,4 +1,5 @@ #include "pch.h" +#include "Memory.h" extern HMODULE hTier0Module; IMemAlloc** g_ppMemAllocSingleton; @@ -77,6 +78,12 @@ void* realloc(void* old_ptr, size_t size) return nullptr; } -void* operator new(size_t n) { return malloc(n); } +void* operator new(size_t n) +{ + return malloc(n); +} -void operator delete(void* p) { return free(p); } +void operator delete(void* p) noexcept +{ + return free(p); +} diff --git a/loader_launcher_proxy/Memory.h b/loader_launcher_proxy/Memory.h index c983966c..824d9d0f 100644 --- a/loader_launcher_proxy/Memory.h +++ b/loader_launcher_proxy/Memory.h @@ -2,23 +2,23 @@ class IMemAlloc { -public: - struct VTable - { - void* unknown[1]; // alloc debug - void* (*Alloc) (IMemAlloc* memAlloc, size_t nSize); - void* unknown2[1]; // realloc debug - void* (*Realloc)(IMemAlloc* memAlloc, void* pMem, size_t nSize); - void* unknown3[1]; // free #1 - void (*Free) (IMemAlloc* memAlloc, void* pMem); - void* unknown4[2]; // nullsubs, maybe CrtSetDbgFlag - size_t(*GetSize) (IMemAlloc* memAlloc, void* pMem); - void* unknown5[9]; // they all do literally nothing - void (*DumpStats) (IMemAlloc* memAlloc); - void (*DumpStatsFileBase) (IMemAlloc* memAlloc, const char* pchFileBase); - void* unknown6[4]; - int (*heapchk) (IMemAlloc* memAlloc); - }; + public: + struct VTable + { + void* unknown[1]; // alloc debug + void* (*Alloc)(IMemAlloc* memAlloc, size_t nSize); + void* unknown2[1]; // realloc debug + void* (*Realloc)(IMemAlloc* memAlloc, void* pMem, size_t nSize); + void* unknown3[1]; // free #1 + void (*Free)(IMemAlloc* memAlloc, void* pMem); + void* unknown4[2]; // nullsubs, maybe CrtSetDbgFlag + size_t (*GetSize)(IMemAlloc* memAlloc, void* pMem); + void* unknown5[9]; // they all do literally nothing + void (*DumpStats)(IMemAlloc* memAlloc); + void (*DumpStatsFileBase)(IMemAlloc* memAlloc, const char* pchFileBase); + void* unknown6[4]; + int (*heapchk)(IMemAlloc* memAlloc); + }; - VTable* m_vtable; + VTable* m_vtable; }; diff --git a/loader_launcher_proxy/dllmain.cpp b/loader_launcher_proxy/dllmain.cpp index 1215ca1f..a382bc97 100644 --- a/loader_launcher_proxy/dllmain.cpp +++ b/loader_launcher_proxy/dllmain.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include #include #include @@ -14,61 +14,64 @@ HMODULE hTier0Module; using CreateInterfaceFn = void* (*)(const char* pName, int* pReturnCode); // does not seem to ever be used -extern "C" _declspec(dllexport) void* __fastcall CreateInterface(const char* pName, int* pReturnCode) +extern "C" __declspec(dllexport) void* __fastcall CreateInterface(const char* pName, int* pReturnCode) { - //AppSystemCreateInterfaceFn(pName, pReturnCode); - printf("external CreateInterface: name: %s\n", pName); + // AppSystemCreateInterfaceFn(pName, pReturnCode); + printf("external CreateInterface: name: %s\n", pName); - static CreateInterfaceFn launcher_CreateInterface = (CreateInterfaceFn)GetProcAddress(hLauncherModule, "CreateInterface"); - auto res = launcher_CreateInterface(pName, pReturnCode); + static CreateInterfaceFn launcher_CreateInterface = (CreateInterfaceFn)GetProcAddress(hLauncherModule, "CreateInterface"); + auto res = launcher_CreateInterface(pName, pReturnCode); - printf("external CreateInterface: return code: %p\n", res); - return res; + printf("external CreateInterface: return code: %p\n", res); + return res; } bool GetExePathWide(wchar_t* dest, DWORD destSize) { - if (!dest) return NULL; - if (destSize < MAX_PATH) return NULL; + if (!dest) + return NULL; + if (destSize < MAX_PATH) + return NULL; - DWORD length = GetModuleFileNameW(NULL, dest, destSize); - return length && PathRemoveFileSpecW(dest); + DWORD length = GetModuleFileNameW(NULL, dest, destSize); + return length && PathRemoveFileSpecW(dest); } FARPROC GetLauncherMain() { - static FARPROC Launcher_LauncherMain; - if (!Launcher_LauncherMain) - Launcher_LauncherMain = GetProcAddress(hLauncherModule, "LauncherMain"); - return Launcher_LauncherMain; + static FARPROC Launcher_LauncherMain; + if (!Launcher_LauncherMain) + Launcher_LauncherMain = GetProcAddress(hLauncherModule, "LauncherMain"); + return Launcher_LauncherMain; } void LibraryLoadError(DWORD dwMessageId, const wchar_t* libName, const wchar_t* location) { - char text[4096]; - std::string message = std::system_category().message(dwMessageId); - sprintf_s(text, "Failed to load the %ls at \"%ls\" (%lu):\n\n%hs", libName, location, dwMessageId, message.c_str()); - if (dwMessageId == 126 && std::filesystem::exists(location)) - { - sprintf_s(text, "%s\n\nThe file at the specified location DOES exist, so this error indicates that one of its *dependencies* failed to be found.", text); - } - MessageBoxA(GetForegroundWindow(), text, "Northstar Launcher Proxy Error", 0); + char text[4096]; + std::string message = std::system_category().message(dwMessageId); + sprintf_s(text, "Failed to load the %ls at \"%ls\" (%lu):\n\n%hs", libName, location, dwMessageId, message.c_str()); + if (dwMessageId == 126 && std::filesystem::exists(location)) + { + sprintf_s( + text, + "%s\n\nThe file at the specified location DOES exist, so this error indicates that one of its *dependencies* failed to be " + "found.", + text); + } + MessageBoxA(GetForegroundWindow(), text, "Northstar Launcher Proxy Error", 0); } -BOOL APIENTRY DllMain( HMODULE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved - ) +BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - case DLL_PROCESS_DETACH: - break; - } - return TRUE; + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; } wchar_t exePath[4096]; @@ -76,86 +79,96 @@ wchar_t dllPath[4096]; bool ShouldLoadNorthstar() { - bool loadNorthstar = !strstr(GetCommandLineA(), "-vanilla"); - - if (!loadNorthstar) - return loadNorthstar; - - auto runNorthstarFile = std::ifstream("run_northstar.txt"); - if (runNorthstarFile) - { - std::stringstream runNorthstarFileBuffer; - runNorthstarFileBuffer << runNorthstarFile.rdbuf(); - runNorthstarFile.close(); - if (runNorthstarFileBuffer.str()._Starts_with("0")) - loadNorthstar = false; - } - return loadNorthstar; + bool loadNorthstar = !strstr(GetCommandLineA(), "-vanilla"); + + if (!loadNorthstar) + return loadNorthstar; + + auto runNorthstarFile = std::ifstream("run_northstar.txt"); + if (runNorthstarFile) + { + std::stringstream runNorthstarFileBuffer; + runNorthstarFileBuffer << runNorthstarFile.rdbuf(); + runNorthstarFile.close(); + if (runNorthstarFileBuffer.str().starts_with("0")) + loadNorthstar = false; + } + return loadNorthstar; } bool LoadNorthstar() { - FARPROC Hook_Init = nullptr; - { - swprintf_s(dllPath, L"%s\\Northstar.dll", exePath); - hHookModule = LoadLibraryExW(dllPath, 0, LOAD_WITH_ALTERED_SEARCH_PATH); - if (hHookModule) Hook_Init = GetProcAddress(hHookModule, "InitialiseNorthstar"); - if (!hHookModule || Hook_Init == nullptr) - { - LibraryLoadError(GetLastError(), L"Northstar.dll", dllPath); - return false; - } - } - - ((bool (*)()) Hook_Init)(); - return true; + FARPROC Hook_Init = nullptr; + { + swprintf_s(dllPath, L"%s\\Northstar.dll", exePath); + hHookModule = LoadLibraryExW(dllPath, 0, LOAD_WITH_ALTERED_SEARCH_PATH); + if (hHookModule) + Hook_Init = GetProcAddress(hHookModule, "InitialiseNorthstar"); + if (!hHookModule || Hook_Init == nullptr) + { + LibraryLoadError(GetLastError(), L"Northstar.dll", dllPath); + return false; + } + } + + ((bool (*)())Hook_Init)(); + return true; } extern "C" __declspec(dllexport) int LauncherMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { - { - if (!GetExePathWide(exePath, 4096)) - { - MessageBoxA(GetForegroundWindow(), "Failed getting game directory.\nThe game cannot continue and has to exit.", "Northstar Launcher Proxy Error", 0); - return 1; - } - - bool loadNorthstar = ShouldLoadNorthstar(); - - if (loadNorthstar) - { - swprintf_s(dllPath, L"%s\\bin\\x64_retail\\tier0.dll", exePath); - hTier0Module = LoadLibraryExW(dllPath, 0, LOAD_WITH_ALTERED_SEARCH_PATH); - if (!hTier0Module) - { - LibraryLoadError(GetLastError(), L"tier0.dll", dllPath); - return 1; - } - - if (!LoadNorthstar()) - return 1; - } - //else printf("\n\n WILL !!!NOT!!! LOAD NORTHSTAR\n\n"); - - swprintf_s(dllPath, L"%s\\bin\\x64_retail\\launcher.org.dll", exePath); - hLauncherModule = LoadLibraryExW(dllPath, 0, LOAD_WITH_ALTERED_SEARCH_PATH); - if (!hLauncherModule) - { - LibraryLoadError(GetLastError(), L"launcher.org.dll", dllPath); - return 1; - } - } - - auto LauncherMain = GetLauncherMain(); - if (!LauncherMain) - MessageBoxA(GetForegroundWindow(), "Failed loading launcher.org.dll.\nThe game cannot continue and has to exit.", "Northstar Launcher Proxy Error", 0); - //auto result = ((__int64(__fastcall*)())LauncherMain)(); - //auto result = ((signed __int64(__fastcall*)(__int64))LauncherMain)(0i64); - return ((int(__fastcall*)(HINSTANCE, HINSTANCE, LPSTR, int))LauncherMain)(hInstance, hPrevInstance, lpCmdLine, nCmdShow); + { + if (!GetExePathWide(exePath, 4096)) + { + MessageBoxA( + GetForegroundWindow(), + "Failed getting game directory.\nThe game cannot continue and has to exit.", + "Northstar Launcher Proxy Error", + 0); + return 1; + } + + bool loadNorthstar = ShouldLoadNorthstar(); + + if (loadNorthstar) + { + swprintf_s(dllPath, L"%s\\bin\\x64_retail\\tier0.dll", exePath); + hTier0Module = LoadLibraryExW(dllPath, 0, LOAD_WITH_ALTERED_SEARCH_PATH); + if (!hTier0Module) + { + LibraryLoadError(GetLastError(), L"tier0.dll", dllPath); + return 1; + } + + if (!LoadNorthstar()) + return 1; + } + // else printf("\n\n WILL !!!NOT!!! LOAD NORTHSTAR\n\n"); + + swprintf_s(dllPath, L"%s\\bin\\x64_retail\\launcher.org.dll", exePath); + hLauncherModule = LoadLibraryExW(dllPath, 0, LOAD_WITH_ALTERED_SEARCH_PATH); + if (!hLauncherModule) + { + LibraryLoadError(GetLastError(), L"launcher.org.dll", dllPath); + return 1; + } + } + + auto LauncherMain = GetLauncherMain(); + if (!LauncherMain) + MessageBoxA( + GetForegroundWindow(), + "Failed loading launcher.org.dll.\nThe game cannot continue and has to exit.", + "Northstar Launcher Proxy Error", + 0); + // auto result = ((__int64(__fastcall*)())LauncherMain)(); + // auto result = ((signed __int64(__fastcall*)(__int64))LauncherMain)(0i64); + return ((int(__fastcall*)(HINSTANCE, HINSTANCE, LPSTR, int))LauncherMain)(hInstance, hPrevInstance, lpCmdLine, nCmdShow); } // doubt that will help us here (in launcher.dll) though -extern "C" { - __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001; - __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; +extern "C" +{ + __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001; + __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; } diff --git a/loader_launcher_proxy/framework.h b/loader_launcher_proxy/framework.h index d1b49600..2fd581a2 100644 --- a/loader_launcher_proxy/framework.h +++ b/loader_launcher_proxy/framework.h @@ -1,7 +1,7 @@ #pragma once -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from windows.headers #define WIN32_EXTRA_LEAN #define VC_EXTRALEAN // Windows Header Files -#include +#include diff --git a/loader_launcher_proxy/loader_launcher_proxy.vcxproj b/loader_launcher_proxy/loader_launcher_proxy.vcxproj index 24cdabc0..b62ac63f 100644 --- a/loader_launcher_proxy/loader_launcher_proxy.vcxproj +++ b/loader_launcher_proxy/loader_launcher_proxy.vcxproj @@ -59,7 +59,7 @@ true Use pch.h - stdcpp17 + stdcpp20 Windows @@ -78,7 +78,7 @@ true Use pch.h - stdcpp17 + stdcpp20 Windows diff --git a/loader_launcher_proxy/pch.h b/loader_launcher_proxy/pch.h index 885d5d62..cc757129 100644 --- a/loader_launcher_proxy/pch.h +++ b/loader_launcher_proxy/pch.h @@ -10,4 +10,4 @@ // add headers that you want to pre-compile here #include "framework.h" -#endif //PCH_H +#endif // PCH_H diff --git a/loader_wsock32_proxy/dllmain.cpp b/loader_wsock32_proxy/dllmain.cpp index f4c0d604..7feb278d 100644 --- a/loader_wsock32_proxy/dllmain.cpp +++ b/loader_wsock32_proxy/dllmain.cpp @@ -1,7 +1,7 @@ #include "pch.h" #include "loader.h" -#include +#include #include HINSTANCE hLThis = 0; @@ -10,8 +10,10 @@ HINSTANCE hL = 0; bool GetExePathWide(wchar_t* dest, DWORD destSize) { - if (!dest) return NULL; - if (destSize < MAX_PATH) return NULL; + if (!dest) + return NULL; + if (destSize < MAX_PATH) + return NULL; DWORD length = GetModuleFileNameW(NULL, dest, destSize); return length && PathRemoveFileSpecW(dest); @@ -29,7 +31,11 @@ BOOL WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID) if (!GetExePathWide(exePath, 4096)) { - MessageBoxA(GetForegroundWindow(), "Failed getting game directory.\nThe game cannot continue and has to exit.", "Northstar Wsock32 Proxy Error", 0); + MessageBoxA( + GetForegroundWindow(), + "Failed getting game directory.\nThe game cannot continue and has to exit.", + "Northstar Wsock32 Proxy Error", + 0); return true; } @@ -59,7 +65,14 @@ BOOL WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID) { if (!std::filesystem::exists(temp_dir)) { - swprintf_s(buffer2, L"Failed copying wsock32.dll from system32 to \"%s\"\n\n%S\n\nFurthermore, we failed copying wsock32.dll into temporary directory at \"%s\"\n\n%S", buffer1, e1.what(), temp_dir.c_str(), e2.what()); + swprintf_s( + buffer2, + L"Failed copying wsock32.dll from system32 to \"%s\"\n\n%S\n\nFurthermore, we failed copying wsock32.dll into " + L"temporary directory at \"%s\"\n\n%S", + buffer1, + e1.what(), + temp_dir.c_str(), + e2.what()); MessageBoxW(GetForegroundWindow(), buffer2, L"Northstar Wsock32 Proxy Error", 0); return false; } @@ -68,7 +81,8 @@ BOOL WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID) } } hL = LoadLibraryExW(buffer1, 0, LOAD_WITH_ALTERED_SEARCH_PATH); - if (!hL) { + if (!hL) + { LibraryLoadError(GetLastError(), L"wsock32.org.dll", buffer1); return false; } @@ -104,52 +118,64 @@ extern "C" FARPROC PA = NULL; int RunASM(); - void PROXY_EnumProtocolsA() { + void PROXY_EnumProtocolsA() + { PA = p[1]; RunASM(); } - void PROXY_EnumProtocolsW() { + void PROXY_EnumProtocolsW() + { PA = p[2]; RunASM(); } - void PROXY_GetAddressByNameA() { + void PROXY_GetAddressByNameA() + { PA = p[4]; RunASM(); } - void PROXY_GetAddressByNameW() { + void PROXY_GetAddressByNameW() + { PA = p[5]; RunASM(); } - void PROXY_WEP() { + void PROXY_WEP() + { PA = p[17]; RunASM(); } - void PROXY_WSARecvEx() { + void PROXY_WSARecvEx() + { PA = p[30]; RunASM(); } - void PROXY___WSAFDIsSet() { + void PROXY___WSAFDIsSet() + { PA = p[36]; RunASM(); } - void PROXY_getnetbyname() { + void PROXY_getnetbyname() + { PA = p[45]; RunASM(); } - void PROXY_getsockopt() { + void PROXY_getsockopt() + { PA = p[52]; RunASM(); } - void PROXY_inet_network() { + void PROXY_inet_network() + { PA = p[56]; RunASM(); } - void PROXY_s_perror() { + void PROXY_s_perror() + { PA = p[67]; RunASM(); } - void PROXY_setsockopt() { + void PROXY_setsockopt() + { PA = p[72]; RunASM(); } -} \ No newline at end of file +} diff --git a/loader_wsock32_proxy/hookutils.cpp b/loader_wsock32_proxy/hookutils.cpp index f933f993..ed2b6c3a 100644 --- a/loader_wsock32_proxy/hookutils.cpp +++ b/loader_wsock32_proxy/hookutils.cpp @@ -1,54 +1,61 @@ +#include + #include "pch.h" #include "../NorthstarDedicatedTest/hookutils.h" -#define ERROR(...) { char err[2048]; sprintf_s(err, __VA_ARGS__); MessageBoxA(GetForegroundWindow(), err, "Northstar Wsock32 Proxy Error", 0); } +#define HU_ERROR(...) \ + { \ + char err[2048]; \ + snprintf(err, sizeof(err), __VA_ARGS__); \ + MessageBoxA(GetForegroundWindow(), err, "Northstar Wsock32 Proxy Error", 0); \ + } void HookEnabler::CreateHook(LPVOID ppTarget, LPVOID ppDetour, LPVOID* ppOriginal, const char* targetName) { - // the macro for this uses ppTarget's name as targetName, and this typically starts with & - // targetname is used for debug stuff and debug output is nicer if we don't have this - if (*targetName == '&') - targetName++; + // the macro for this uses ppTarget's name as targetName, and this typically starts with & + // targetname is used for debug stuff and debug output is nicer if we don't have this + if (*targetName == '&') + targetName++; - if (MH_CreateHook(ppTarget, ppDetour, ppOriginal) == MH_OK) - { - HookTarget* target = new HookTarget; - target->targetAddress = ppTarget; - target->targetName = (char*)targetName; + if (MH_CreateHook(ppTarget, ppDetour, ppOriginal) == MH_OK) + { + HookTarget* target = new HookTarget; + target->targetAddress = ppTarget; + target->targetName = (char*)targetName; - m_hookTargets.push_back(target); - } - else - { - if (targetName != nullptr) - { - ERROR("MH_CreateHook failed for function %s", targetName); - } - else - { - ERROR("MH_CreateHook failed for unknown function"); - } - } + m_hookTargets.push_back(target); + } + else + { + if (targetName != nullptr) + { + HU_ERROR("MH_CreateHook failed for function %s", targetName); + } + else + { + HU_ERROR("MH_CreateHook failed for unknown function"); + } + } } HookEnabler::~HookEnabler() { - for (auto& hook : m_hookTargets) - { - if (MH_EnableHook(hook->targetAddress) != MH_OK) - { - if (hook->targetName != nullptr) - { - ERROR("MH_EnableHook failed for function %s", hook->targetName); - } - else - { - ERROR("MH_EnableHook failed for unknown function"); - } - } - else - { - //ERROR("Enabling hook %s", hook->targetName); - } - } -} \ No newline at end of file + for (auto& hook : m_hookTargets) + { + if (MH_EnableHook(hook->targetAddress) != MH_OK) + { + if (hook->targetName != nullptr) + { + HU_ERROR("MH_EnableHook failed for function %s", hook->targetName); + } + else + { + HU_ERROR("MH_EnableHook failed for unknown function"); + } + } + else + { + // HU_ERROR("Enabling hook %s", hook->targetName); + } + } +} diff --git a/loader_wsock32_proxy/loader.cpp b/loader_wsock32_proxy/loader.cpp index 61b4daf3..c53f5c00 100644 --- a/loader_wsock32_proxy/loader.cpp +++ b/loader_wsock32_proxy/loader.cpp @@ -14,7 +14,11 @@ void LibraryLoadError(DWORD dwMessageId, const wchar_t* libName, const wchar_t* sprintf_s(text, "Failed to load the %ls at \"%ls\" (%lu):\n\n%hs", libName, location, dwMessageId, message.c_str()); if (dwMessageId == 126 && std::filesystem::exists(location)) { - sprintf_s(text, "%s\n\nThe file at the specified location DOES exist, so this error indicates that one of its *dependencies* failed to be found.", text); + sprintf_s( + text, + "%s\n\nThe file at the specified location DOES exist, so this error indicates that one of its *dependencies* failed to be " + "found.", + text); } MessageBoxA(GetForegroundWindow(), text, "Northstar Wsock32 Proxy Error", 0); } @@ -32,7 +36,7 @@ bool ShouldLoadNorthstar() std::stringstream runNorthstarFileBuffer; runNorthstarFileBuffer << runNorthstarFile.rdbuf(); runNorthstarFile.close(); - if (!runNorthstarFileBuffer.str()._Starts_with("0")) + if (!runNorthstarFileBuffer.str().starts_with("0")) loadNorthstar = true; } return loadNorthstar; @@ -44,7 +48,8 @@ bool LoadNorthstar() { swprintf_s(buffer1, L"%s\\Northstar.dll", exePath); auto hHookModule = LoadLibraryExW(buffer1, 0, LOAD_WITH_ALTERED_SEARCH_PATH); - if (hHookModule) Hook_Init = GetProcAddress(hHookModule, "InitialiseNorthstar"); + if (hHookModule) + Hook_Init = GetProcAddress(hHookModule, "InitialiseNorthstar"); if (!hHookModule || Hook_Init == nullptr) { LibraryLoadError(GetLastError(), L"Northstar.dll", buffer1); @@ -52,11 +57,11 @@ bool LoadNorthstar() } } - ((bool (*)()) Hook_Init)(); + ((bool (*)())Hook_Init)(); return true; } -typedef int(*LauncherMainType)(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); +typedef int (*LauncherMainType)(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); LauncherMainType LauncherMainOriginal; int LauncherMainHook(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) @@ -73,19 +78,28 @@ bool ProvisionNorthstar() if (MH_Initialize() != MH_OK) { - MessageBoxA(GetForegroundWindow(), "MH_Initialize failed\nThe game cannot continue and has to exit.", "Northstar Wsock32 Proxy Error", 0); + MessageBoxA( + GetForegroundWindow(), "MH_Initialize failed\nThe game cannot continue and has to exit.", "Northstar Wsock32 Proxy Error", 0); return false; } auto launcherHandle = GetModuleHandleA("launcher.dll"); if (!launcherHandle) { - MessageBoxA(GetForegroundWindow(), "Launcher isn't loaded yet.\nThe game cannot continue and has to exit.", "Northstar Wsock32 Proxy Error", 0); + MessageBoxA( + GetForegroundWindow(), + "Launcher isn't loaded yet.\nThe game cannot continue and has to exit.", + "Northstar Wsock32 Proxy Error", + 0); return false; } HookEnabler hook; - ENABLER_CREATEHOOK(hook, GetProcAddress(launcherHandle, "LauncherMain"), &LauncherMainHook, reinterpret_cast(&LauncherMainOriginal)); + ENABLER_CREATEHOOK( + hook, + reinterpret_cast(GetProcAddress(launcherHandle, "LauncherMain")), + &LauncherMainHook, + reinterpret_cast(&LauncherMainOriginal)); return true; -} \ No newline at end of file +} diff --git a/loader_wsock32_proxy/loader_wsock32_proxy.vcxproj b/loader_wsock32_proxy/loader_wsock32_proxy.vcxproj index 9866d368..34a80c13 100644 --- a/loader_wsock32_proxy/loader_wsock32_proxy.vcxproj +++ b/loader_wsock32_proxy/loader_wsock32_proxy.vcxproj @@ -60,7 +60,7 @@ true Use pch.h - stdcpp17 + stdcpp20 ..\NorthstarDedicatedTest\ @@ -82,7 +82,7 @@ Use pch.h ..\NorthstarDedicatedTest\ - stdcpp17 + stdcpp20 Windows diff --git a/loader_wsock32_proxy/pch.h b/loader_wsock32_proxy/pch.h index 0103ff59..6e8873a1 100644 --- a/loader_wsock32_proxy/pch.h +++ b/loader_wsock32_proxy/pch.h @@ -7,10 +7,10 @@ #ifndef PCH_H #define PCH_H -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers // Windows Header Files #include #include "include/MinHook.h" -#endif //PCH_H +#endif // PCH_H -- cgit v1.2.3