aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHappyDOGE <28511119+HappyDOGE@users.noreply.github.com>2021-12-27 19:56:08 +0300
committerHappyDOGE <28511119+HappyDOGE@users.noreply.github.com>2021-12-27 19:56:08 +0300
commit1cb1d1e19804d1b7b52c8b2bd21f10dde4bf6bf8 (patch)
treed38f1cc4c42990350ac6ec9ea765191f07e2a47e
parentbf41a73a0a9d3c5c26086559570a9d6502f137c3 (diff)
downloadNorthstarLauncher-1cb1d1e19804d1b7b52c8b2bd21f10dde4bf6bf8.tar.gz
NorthstarLauncher-1cb1d1e19804d1b7b52c8b2bd21f10dde4bf6bf8.zip
remove hook preload as it's not crossplatform
use a universal solution instead
-rw-r--r--NorthstarDedicatedTest/dllmain.cpp4
-rw-r--r--NorthstarDedicatedTest/hooks.cpp32
-rw-r--r--NorthstarDedicatedTest/hooks.h2
-rw-r--r--NorthstarDedicatedTest/maxplayers.cpp8
4 files changed, 12 insertions, 34 deletions
diff --git a/NorthstarDedicatedTest/dllmain.cpp b/NorthstarDedicatedTest/dllmain.cpp
index 1eafef7f..6f57d265 100644
--- a/NorthstarDedicatedTest/dllmain.cpp
+++ b/NorthstarDedicatedTest/dllmain.cpp
@@ -121,8 +121,8 @@ void InitialiseNorthstar()
// maxplayers increase
AddDllLoadCallback("engine.dll", InitialiseMaxPlayersOverride_Engine);
- AddDllLoadCallback("client.dll", InitialiseMaxPlayersOverride_Client, true);
- AddDllLoadCallback("server.dll", InitialiseMaxPlayersOverride_Server, true);
+ AddDllLoadCallback("client.dll", InitialiseMaxPlayersOverride_Client);
+ AddDllLoadCallback("server.dll", InitialiseMaxPlayersOverride_Server);
// mod manager after everything else
AddDllLoadCallback("engine.dll", InitialiseModManager);
diff --git a/NorthstarDedicatedTest/hooks.cpp b/NorthstarDedicatedTest/hooks.cpp
index e5ea0cb6..302fa7bb 100644
--- a/NorthstarDedicatedTest/hooks.cpp
+++ b/NorthstarDedicatedTest/hooks.cpp
@@ -14,15 +14,9 @@ HMODULE LoadLibraryExAHook(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);
typedef HMODULE(*LoadLibraryExWType)(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);
HMODULE LoadLibraryExWHook(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);
-typedef BOOLEAN(*PDLL_INIT_ROUTINE)(PVOID DllHandle, ULONG Reason, PCONTEXT Context);
-typedef BOOLEAN(*LdrpCallInitRoutineType)(PDLL_INIT_ROUTINE EntryPoint, PVOID BaseAddress, ULONG Reason, PVOID Context);
-BOOLEAN LdrpCallInitRoutineHook(PDLL_INIT_ROUTINE EntryPoint, PVOID BaseAddress, ULONG Reason, PVOID Context);
-
LoadLibraryExAType LoadLibraryExAOriginal;
LoadLibraryExWType LoadLibraryExWOriginal;
-LdrpCallInitRoutineType LdrpCallInitRoutineHookOriginal;
-
void InstallInitialHooks()
{
if (MH_Initialize() != MH_OK)
@@ -31,9 +25,6 @@ void InstallInitialHooks()
HookEnabler hook;
ENABLER_CREATEHOOK(hook, &LoadLibraryExA, &LoadLibraryExAHook, reinterpret_cast<LPVOID*>(&LoadLibraryExAOriginal));
ENABLER_CREATEHOOK(hook, &LoadLibraryExW, &LoadLibraryExWHook, reinterpret_cast<LPVOID*>(&LoadLibraryExWOriginal));
-
- void* LdrpCallInitRoutine = FindSignature("ntdll.dll", "\x48\x89\x5C\x24\x00\x44\x89\x44\x24\x00\x48\x89\x54\x24", "xxxx?xxxx?xxxx");
- ENABLER_CREATEHOOK(hook, LdrpCallInitRoutine, &LdrpCallInitRoutineHook, reinterpret_cast<LPVOID*>(&LdrpCallInitRoutineHookOriginal));
}
// dll load callback stuff
@@ -43,18 +34,16 @@ struct DllLoadCallback
std::string dll;
DllLoadCallbackFuncType callback;
bool called;
- bool preinit;
};
std::vector<DllLoadCallback*> dllLoadCallbacks;
-void AddDllLoadCallback(std::string dll, DllLoadCallbackFuncType callback, bool preinit)
+void AddDllLoadCallback(std::string dll, DllLoadCallbackFuncType callback)
{
DllLoadCallback* callbackStruct = new DllLoadCallback;
callbackStruct->dll = dll;
callbackStruct->callback = callback;
callbackStruct->called = false;
- callbackStruct->preinit = preinit;
dllLoadCallbacks.push_back(callbackStruct);
}
@@ -97,23 +86,4 @@ HMODULE LoadLibraryExWHook(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
}
return moduleAddress;
-}
-
-BOOLEAN LdrpCallInitRoutineHook(PDLL_INIT_ROUTINE EntryPoint, PVOID BaseAddress, ULONG Reason, PVOID Context)
-{
- char fullModulePath[MAX_PATH] = { 0 };
- GetModuleFileNameA((HMODULE)BaseAddress, fullModulePath, sizeof(fullModulePath));
-
- std::string name = std::filesystem::path(fullModulePath).filename().string();
-
- for (auto& callbackStruct : dllLoadCallbacks)
- {
- if (!callbackStruct->called && callbackStruct->preinit && name == callbackStruct->dll)
- {
- callbackStruct->callback((HMODULE)BaseAddress);
- callbackStruct->called = true;
- }
- }
-
- return LdrpCallInitRoutineHookOriginal(EntryPoint, BaseAddress, Reason, Context);
} \ No newline at end of file
diff --git a/NorthstarDedicatedTest/hooks.h b/NorthstarDedicatedTest/hooks.h
index 012b12ec..972b38a6 100644
--- a/NorthstarDedicatedTest/hooks.h
+++ b/NorthstarDedicatedTest/hooks.h
@@ -4,4 +4,4 @@
void InstallInitialHooks();
typedef void(*DllLoadCallbackFuncType)(HMODULE moduleAddress);
-void AddDllLoadCallback(std::string dll, DllLoadCallbackFuncType callback, bool preinit = false); \ No newline at end of file
+void AddDllLoadCallback(std::string dll, DllLoadCallbackFuncType callback); \ No newline at end of file
diff --git a/NorthstarDedicatedTest/maxplayers.cpp b/NorthstarDedicatedTest/maxplayers.cpp
index 1c984c96..e649b0a6 100644
--- a/NorthstarDedicatedTest/maxplayers.cpp
+++ b/NorthstarDedicatedTest/maxplayers.cpp
@@ -427,6 +427,10 @@ void InitialiseMaxPlayersOverride_Server(HMODULE baseAddress)
// GameLoop::RunUserCmds - rebuild
HookEnabler hook;
ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0x483D10, &RunUserCmds_Hook, reinterpret_cast<LPVOID*>(&RunUserCmds_Original));
+
+ *(DWORD*)((char*)baseAddress + 0x14E7390) = 0;
+ auto DT_PlayerResource_Construct = (__int64(__fastcall*)())((char*)baseAddress + 0x5C4FE0);
+ DT_PlayerResource_Construct();
}
void InitialiseMaxPlayersOverride_Client(HMODULE baseAddress)
@@ -579,4 +583,8 @@ void InitialiseMaxPlayersOverride_Client(HMODULE baseAddress)
// Some other get name func 2 (that seems to be unused too) - change m_bConnected address
ChangeOffset<unsigned int>((char*)baseAddress + 0x164834 + 3, C_PlayerResource_OriginalSize + PlayerResource_Connected_Start);
+
+ *(DWORD*)((char*)baseAddress + 0xC35068) = 0;
+ auto DT_PlayerResource_Construct = (__int64(__fastcall*)())((char*)baseAddress + 0x163400);
+ DT_PlayerResource_Construct();
} \ No newline at end of file