diff --git a/GUI/HostInterop/HostInterop.h b/GUI/HostInterop/HostInterop.h index 617c60f..ce127d2 100644 Binary files a/GUI/HostInterop/HostInterop.h and b/GUI/HostInterop/HostInterop.h differ diff --git a/oldgui/command.cpp b/oldgui/command.cpp index 4fad94a..3b791f8 100644 --- a/oldgui/command.cpp +++ b/oldgui/command.cpp @@ -41,7 +41,7 @@ DWORD ProcessCommand(const std::wstring& cmd, DWORD pid) { HookParam hp = {}; if (Parse(m[1].str(), hp)) - InsertHook(pid, hp); + InsertHook(pid, &hp); } else if (regex_match(cmd, m, wregex(L":(?:h|help)", wregex::icase))) { diff --git a/oldgui/main.cpp b/oldgui/main.cpp index bc72605..a884736 100644 --- a/oldgui/main.cpp +++ b/oldgui/main.cpp @@ -149,7 +149,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine if (StartHost()) { SetUnhandledExceptionFilter(UnhandledExcept); - man = GetHostHookManager(); + GetHostHookManager(&man); pfman = new ProfileManager(); DefaultSettings(); LoadSettings(); diff --git a/oldgui/window.cpp b/oldgui/window.cpp index ba0abc1..81d9a5e 100644 --- a/oldgui/window.cpp +++ b/oldgui/window.cpp @@ -488,7 +488,7 @@ void RegisterProcess(DWORD pid) { for (auto i = pf->Hooks().begin(); i != pf->Hooks().end(); ++i) { - InsertHook(pid, i->get()->HP(), toMultiByteString(i->get()->Name())); + InsertHook(pid, &i->get()->HP(), toMultiByteString(i->get()->Name())); } } } diff --git a/texthook/host.cc b/texthook/host.cc index 7391c47..5e5393b 100644 --- a/texthook/host.cc +++ b/texthook/host.cc @@ -117,19 +117,19 @@ DLLEXPORT bool DetachProcessById(DWORD processId) return WriteFile(man->GetHostPipe(processId), &command, sizeof(command), &unused, nullptr); } -DLLEXPORT HookManager* GetHostHookManager() +DLLEXPORT void GetHostHookManager(HookManager** hookman) { - return man; + *hookman = man; } -DLLEXPORT bool InsertHook(DWORD pid, HookParam hp, std::string name) +DLLEXPORT bool InsertHook(DWORD pid, const HookParam *hp, std::string name) { HANDLE commandPipe = man->GetHostPipe(pid); if (commandPipe == nullptr) return false; BYTE buffer[PIPE_BUFFER_SIZE] = {}; *(DWORD*)buffer = HOST_COMMAND_NEW_HOOK; - *(HookParam*)(buffer + sizeof(DWORD)) = hp; + *(HookParam*)(buffer + sizeof(DWORD)) = *hp; if (name.size()) strcpy((char*)buffer + sizeof(DWORD) + sizeof(HookParam), name.c_str()); DWORD unused; return WriteFile(commandPipe, buffer, sizeof(DWORD) + sizeof(HookParam) + name.size(), &unused, nullptr); diff --git a/texthook/host.h b/texthook/host.h index 876d0b2..3919943 100644 --- a/texthook/host.h +++ b/texthook/host.h @@ -12,10 +12,10 @@ DLLEXPORT void OpenHost(); DLLEXPORT bool StartHost(); DLLEXPORT void CloseHost(); -DLLEXPORT HookManager* GetHostHookManager(); +DLLEXPORT void GetHostHookManager(HookManager **hookman); DLLEXPORT bool InjectProcessById(DWORD pid, DWORD timeout = 5000); DLLEXPORT bool DetachProcessById(DWORD pid); -DLLEXPORT bool InsertHook(DWORD pid, HookParam hp, std::string name = ""); +DLLEXPORT bool InsertHook(DWORD pid, const HookParam *hp, std::string name = ""); DLLEXPORT bool RemoveHook(DWORD pid, DWORD addr); // EOF