2024-02-07 20:59:24 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
// texthook.h
|
|
|
|
// 8/24/2013 jichi
|
|
|
|
// Branch: IHF_DLL/IHF_CLIENT.h, rev 133
|
|
|
|
//
|
|
|
|
// 8/24/2013 TODO:
|
|
|
|
// - Clean up this file
|
|
|
|
// - Reduce global variables. Use namespaces or singleton classes instead.
|
2024-05-06 22:56:24 +08:00
|
|
|
|
2024-07-21 21:07:05 +08:00
|
|
|
inline std::atomic<bool (*)(LPVOID addr, hook_stack *stack)> trigger_fun = nullptr;
|
2024-02-07 20:59:24 +08:00
|
|
|
|
|
|
|
// jichi 9/25/2013: This class will be used by NtMapViewOfSectionfor
|
|
|
|
// interprocedure communication, where constructor/destructor will NOT work.
|
2024-07-21 21:07:05 +08:00
|
|
|
struct EmbedSharedMem
|
|
|
|
{
|
2024-02-07 20:59:24 +08:00
|
|
|
uint64_t use[10];
|
|
|
|
uint64_t addr[10];
|
|
|
|
uint64_t ctx1[10];
|
|
|
|
uint64_t ctx2[10];
|
|
|
|
UINT32 waittime;
|
|
|
|
UINT32 spaceadjustpolicy;
|
|
|
|
UINT32 keeprawtext;
|
|
|
|
uint64_t hash;
|
|
|
|
wchar_t text[1000];
|
|
|
|
bool fontCharSetEnabled;
|
|
|
|
UINT8 fontCharSet;
|
|
|
|
wchar_t fontFamily[100];
|
|
|
|
UINT codepage;
|
2024-03-23 16:40:52 +08:00
|
|
|
bool fastskipignore;
|
2024-07-21 21:07:05 +08:00
|
|
|
};
|
2024-02-07 20:59:24 +08:00
|
|
|
class TextHook
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
HookParam hp;
|
2024-07-21 21:07:05 +08:00
|
|
|
ALIGNPTR(uint64_t address, void *location);
|
2024-03-31 19:00:26 +08:00
|
|
|
uint64_t savetypeforremove;
|
2024-02-07 20:59:24 +08:00
|
|
|
bool Insert(HookParam hp);
|
|
|
|
void Clear();
|
|
|
|
|
|
|
|
private:
|
|
|
|
void Read();
|
|
|
|
bool InsertHookCode();
|
|
|
|
bool InsertReadCode();
|
2024-03-23 10:11:57 +08:00
|
|
|
bool InsertBreakPoint();
|
|
|
|
bool RemoveBreakPoint();
|
2024-03-31 19:00:26 +08:00
|
|
|
bool breakpointcontext(PCONTEXT);
|
2024-02-07 20:59:24 +08:00
|
|
|
void Send(uintptr_t dwDatabase);
|
2024-07-21 21:07:05 +08:00
|
|
|
int GetLength(hook_stack *stack, uintptr_t in); // jichi 12/25/2013: Return 0 if failed
|
|
|
|
int HookStrlen(BYTE *data);
|
2024-02-07 20:59:24 +08:00
|
|
|
void RemoveHookCode();
|
|
|
|
void RemoveReadCode();
|
2024-07-21 21:07:05 +08:00
|
|
|
bool waitfornotify(TextOutput_T *buffer, void *data, size_t *len, ThreadParam tp);
|
|
|
|
void parsenewlineseperator(void *data, size_t *len);
|
2024-02-07 20:59:24 +08:00
|
|
|
volatile DWORD useCount;
|
2024-07-21 21:07:05 +08:00
|
|
|
ALIGNPTR(uint64_t __1, HANDLE readerThread);
|
|
|
|
ALIGNPTR(uint64_t __2, HANDLE readerEvent);
|
2024-02-07 20:59:24 +08:00
|
|
|
bool err;
|
2024-07-21 21:07:05 +08:00
|
|
|
ALIGNPTR(BYTE __4[140], BYTE trampoline[x64 ? 140 : 40]);
|
|
|
|
ALIGNPTR(uint64_t __3, BYTE *local_buffer);
|
2024-02-07 20:59:24 +08:00
|
|
|
};
|
|
|
|
|
2024-07-21 21:07:05 +08:00
|
|
|
enum
|
|
|
|
{
|
|
|
|
MAX_HOOK = 2500
|
|
|
|
};
|
2024-02-07 20:59:24 +08:00
|
|
|
|
|
|
|
// EOF
|