2016-01-06 00:01:17 +09:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
// host.h
|
|
|
|
// 8/23/2013 jichi
|
|
|
|
// Branch: ITH/IHF.h, rev 105
|
|
|
|
|
2018-08-22 12:24:55 -04:00
|
|
|
#include "common.h"
|
2018-07-23 12:25:02 -07:00
|
|
|
#include "textthread.h"
|
2018-11-10 05:13:59 -05:00
|
|
|
#include "text.h"
|
2018-07-23 12:25:02 -07:00
|
|
|
|
2018-07-24 10:39:02 -07:00
|
|
|
typedef std::function<void(DWORD)> ProcessEventCallback;
|
2018-10-31 01:20:44 -04:00
|
|
|
typedef std::function<void(std::shared_ptr<TextThread>)> ThreadEventCallback;
|
2018-07-23 12:25:02 -07:00
|
|
|
|
|
|
|
namespace Host
|
|
|
|
{
|
2018-11-04 17:12:25 -05:00
|
|
|
void Start(ProcessEventCallback onAttach, ProcessEventCallback onDetach, ThreadEventCallback onCreate, ThreadEventCallback onDestroy, TextThread::OutputCallback output);
|
2018-08-24 12:50:20 -04:00
|
|
|
void Close();
|
2018-08-24 14:04:23 -04:00
|
|
|
|
2018-10-31 12:04:32 -04:00
|
|
|
bool InjectProcess(DWORD processId, DWORD timeout = 5000);
|
|
|
|
void DetachProcess(DWORD processId);
|
2018-08-24 14:04:23 -04:00
|
|
|
|
2018-10-31 12:04:32 -04:00
|
|
|
void InsertHook(DWORD processId, HookParam hp, std::string name = "");
|
|
|
|
void RemoveHook(DWORD processId, uint64_t addr);
|
2018-08-24 12:50:20 -04:00
|
|
|
|
2018-10-31 12:04:32 -04:00
|
|
|
HookParam GetHookParam(DWORD processId, uint64_t addr);
|
2018-11-04 20:48:46 -05:00
|
|
|
inline HookParam GetHookParam(ThreadParam tp) { return GetHookParam(tp.processId, tp.addr); }
|
2018-10-31 12:04:32 -04:00
|
|
|
std::wstring GetHookName(DWORD processId, uint64_t addr);
|
2018-11-04 20:48:46 -05:00
|
|
|
inline std::wstring GetHookName(ThreadParam tp) { return GetHookName(tp.processId, tp.addr); }
|
2018-08-24 12:50:20 -04:00
|
|
|
|
2018-10-31 01:20:44 -04:00
|
|
|
std::shared_ptr<TextThread> GetThread(ThreadParam tp);
|
2018-08-24 12:50:20 -04:00
|
|
|
void AddConsoleOutput(std::wstring text);
|
2018-07-23 12:25:02 -07:00
|
|
|
}
|
2018-09-21 21:27:59 -04:00
|
|
|
|
2018-11-10 05:13:59 -05:00
|
|
|
inline std::wstring StringToWideString(const std::string& text, UINT encoding = CP_UTF8)
|
2018-09-21 21:27:59 -04:00
|
|
|
{
|
2018-09-29 13:10:07 -04:00
|
|
|
std::wstring ret(text.size() + 1, 0);
|
2018-11-10 05:13:59 -05:00
|
|
|
if (int len = MultiByteToWideChar(encoding, 0, text.c_str(), -1, ret.data(), ret.capacity()))
|
|
|
|
{
|
|
|
|
ret.resize(len - 1);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Host::AddConsoleOutput(INVALID_CODEPAGE);
|
|
|
|
return L"";
|
|
|
|
}
|
2018-09-21 21:27:59 -04:00
|
|
|
}
|
|
|
|
|
2016-01-06 00:01:17 +09:00
|
|
|
// EOF
|