diff options
author | BobTheBob <32057864+BobTheBob9@users.noreply.github.com> | 2022-05-26 23:09:15 +0100 |
---|---|---|
committer | BobTheBob <32057864+BobTheBob9@users.noreply.github.com> | 2022-05-26 23:09:15 +0100 |
commit | 2171d95e1221442081bade7929c05b82ca0f2a08 (patch) | |
tree | 78e2d33c13fb0353e3869b08b15c3a6cc3c60393 /NorthstarDedicatedTest/hooks.cpp | |
parent | cc7b0ded08e3dc26fc970169a79c74c54e4f923b (diff) | |
download | NorthstarLauncher-2171d95e1221442081bade7929c05b82ca0f2a08.tar.gz NorthstarLauncher-2171d95e1221442081bade7929c05b82ca0f2a08.zip |
update more stuff to new hook macros
Diffstat (limited to 'NorthstarDedicatedTest/hooks.cpp')
-rw-r--r-- | NorthstarDedicatedTest/hooks.cpp | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/NorthstarDedicatedTest/hooks.cpp b/NorthstarDedicatedTest/hooks.cpp index d4608f85..2b117178 100644 --- a/NorthstarDedicatedTest/hooks.cpp +++ b/NorthstarDedicatedTest/hooks.cpp @@ -46,15 +46,37 @@ void __fileAutohook::Dispatch() hook->Dispatch(); } -ManualHook::ManualHook(const char* funcName, LPVOID* orig, LPVOID func) : pHookFunc(func), ppOrigFunc(orig) +void __fileAutohook::DispatchForModule(const char* pModuleName) +{ + const int iModuleNameLen = strlen(pModuleName); + + for (__autohook* hook : hooks) + if ((hook->iAddressResolutionMode == __autohook::OFFSET_STRING && !strncmp(pModuleName, hook->pAddrString, iModuleNameLen)) || + (hook->iAddressResolutionMode == __autohook::PROCADDRESS && !strcmp(pModuleName, hook->pModuleName))) + hook->Dispatch(); +} + +ManualHook::ManualHook(const char* funcName, LPVOID func) + : pHookFunc(func), ppOrigFunc(nullptr) +{ + const int iFuncNameStrlen = strlen(funcName); + pFuncName = new char[iFuncNameStrlen]; + memcpy(pFuncName, funcName, iFuncNameStrlen); +} + +ManualHook::ManualHook(const char* funcName, LPVOID* orig, LPVOID func) + : pHookFunc(func), ppOrigFunc(orig) { const int iFuncNameStrlen = strlen(funcName); pFuncName = new char[iFuncNameStrlen]; memcpy(pFuncName, funcName, iFuncNameStrlen); } -bool ManualHook::Dispatch(LPVOID addr) +bool ManualHook::Dispatch(LPVOID addr, LPVOID* orig) { + if (orig) + ppOrigFunc = orig; + if (MH_CreateHook(addr, pHookFunc, ppOrigFunc) == MH_OK) { if (MH_EnableHook(addr) == MH_OK) @@ -118,16 +140,15 @@ void AddDllLoadCallbackForClient(std::string dll, DllLoadCallbackFuncType callba AddDllLoadCallback(dll, callback, tag, reliesOn); } -typedef LPSTR (*GetCommandLineAType)(); -GetCommandLineAType GetCommandLineAOriginal; -LPSTR GetCommandLineAHook() +AUTOHOOK_ABSOLUTEADDR(_GetCommandLineA, GetCommandLineA, +LPSTR, WINAPI, (), { static char* cmdlineModified; static char* cmdlineOrg; if (cmdlineOrg == nullptr || cmdlineModified == nullptr) { - cmdlineOrg = GetCommandLineAOriginal(); + cmdlineOrg = _GetCommandLineA(); bool isDedi = strstr(cmdlineOrg, "-dedicated"); // well, this one has to be a real argument bool ignoreStartupArgs = strstr(cmdlineOrg, "-nostartupargs"); @@ -181,7 +202,7 @@ LPSTR GetCommandLineAHook() } return cmdlineModified; -} +}) std::vector<std::string> calledTags; void CallLoadLibraryACallbacks(LPCSTR lpLibFileName, HMODULE moduleAddress) |