LunaHook-mirror/include/texthook.h
恍兮惚兮 7324cf4229 fmt
2024-07-21 21:07:05 +08:00

70 lines
1.7 KiB
C++

#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.
inline std::atomic<bool (*)(LPVOID addr, hook_stack *stack)> trigger_fun = nullptr;
// jichi 9/25/2013: This class will be used by NtMapViewOfSectionfor
// interprocedure communication, where constructor/destructor will NOT work.
struct EmbedSharedMem
{
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;
bool fastskipignore;
UINT32 line_text_length_limit;
};
class TextHook
{
public:
HookParam hp;
ALIGNPTR(uint64_t address, void *location);
uint64_t savetypeforremove;
bool Insert(HookParam hp);
void Clear();
private:
void Read();
bool InsertHookCode();
bool InsertReadCode();
bool InsertBreakPoint();
bool RemoveBreakPoint();
bool breakpointcontext(PCONTEXT);
void Send(uintptr_t dwDatabase);
int GetLength(hook_stack *stack, uintptr_t in); // jichi 12/25/2013: Return 0 if failed
int HookStrlen(BYTE *data);
void RemoveHookCode();
void RemoveReadCode();
bool waitfornotify(TextOutput_T *buffer, void *data, size_t *len, ThreadParam tp);
void parsenewlineseperator(void *data, size_t *len);
volatile DWORD useCount;
ALIGNPTR(uint64_t __1, HANDLE readerThread);
ALIGNPTR(uint64_t __2, HANDLE readerEvent);
bool err;
ALIGNPTR(BYTE __4[140], BYTE trampoline[x64 ? 140 : 40]);
ALIGNPTR(uint64_t __3, BYTE *local_buffer);
};
enum
{
MAX_HOOK = 2500
};
// EOF