Textractor_test/include/types.h

81 lines
2.7 KiB
C
Raw Normal View History

2018-08-23 23:53:23 +08:00
#pragma once
#include "common.h"
#include "const.h"
class WinMutex // Like CMutex but works with scoped_lock
{
public:
WinMutex(std::wstring name = L"", LPSECURITY_ATTRIBUTES sa = nullptr) : m(CreateMutexW(sa, FALSE, name.empty() ? NULL : name.c_str())) {}
void lock() { if (m) WaitForSingleObject(m, INFINITE); }
void unlock() { if (m) ReleaseMutex(m); }
private:
AutoHandle<> m;
};
2019-02-19 12:12:12 +08:00
inline SECURITY_ATTRIBUTES allAccess = std::invoke([] // allows non-admin processes to access kernel objects made by admin processes
{
static SECURITY_DESCRIPTOR sd = {};
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE);
return SECURITY_ATTRIBUTES{ sizeof(SECURITY_ATTRIBUTES), &sd, FALSE };
});
2018-08-23 23:53:23 +08:00
// jichi 3/7/2014: Add guessed comment
2018-12-31 11:11:23 +08:00
struct HookParam
2018-08-23 23:53:23 +08:00
{
uint64_t address; // absolute or relative address
2018-08-27 10:21:15 +08:00
int offset, // offset of the data in the memory
2018-08-23 23:53:23 +08:00
index, // deref_offset1
split, // offset of the split character
split_index; // deref_offset2
2019-01-04 06:52:16 +08:00
union
{
wchar_t module[MAX_MODULE_SIZE];
wchar_t text[MAX_MODULE_SIZE];
};
char function[MAX_MODULE_SIZE];
2018-08-23 23:53:23 +08:00
DWORD type; // flags
2018-10-31 08:50:50 +08:00
UINT codepage; // text encoding
2018-12-21 23:10:51 +08:00
short length_offset; // index of the string length
2018-08-23 23:53:23 +08:00
DWORD user_value; // 7/20/2014: jichi additional parameters for PSP games
2019-02-03 05:54:13 +08:00
void(*text_fun)(DWORD stack, HookParam* hp, BYTE obsoleteAlwaysZero, DWORD* data, DWORD* split, DWORD* len);
bool(*filter_fun)(void* data, DWORD* len, HookParam* hp, BYTE obsoleteAlwaysZero); // jichi 10/24/2014: Add filter function. Return true if skip the text
bool(*hook_fun)(DWORD stack, HookParam* hp); // jichi 10/24/2014: Add generic hook function, return false if stop execution.
2018-12-02 04:52:12 +08:00
char name[HOOK_NAME_SIZE];
2018-08-23 23:53:23 +08:00
};
2018-11-05 09:48:46 +08:00
struct ThreadParam
2018-08-23 23:53:23 +08:00
{
2019-01-10 11:35:01 +08:00
bool operator==(ThreadParam other) const { return processId == other.processId && addr == other.addr && ctx == other.ctx && ctx2 == other.ctx2; }
2018-11-05 09:48:46 +08:00
DWORD processId;
uint64_t addr;
uint64_t ctx; // The context of the hook: by default the first value on stack, usually the return address
uint64_t ctx2; // The subcontext of the hook: 0 by default, generated in a method specific to the hook
2018-08-23 23:53:23 +08:00
};
2018-08-23 23:53:23 +08:00
struct InsertHookCmd // From host
{
2018-12-31 11:11:23 +08:00
InsertHookCmd(HookParam hp) : hp(hp) {}
2019-02-22 02:09:44 +08:00
HostCommandType command = HOST_COMMAND_NEW_HOOK;
2018-08-23 23:53:23 +08:00
HookParam hp;
};
struct ConsoleOutputNotif // From hook
{
ConsoleOutputNotif(std::string message = "") { strncpy_s(this->message, message.c_str(), MESSAGE_SIZE - 1); }
2019-02-22 02:09:44 +08:00
HostNotificationType command = HOST_NOTIFICATION_TEXT;
2018-08-23 23:53:23 +08:00
char message[MESSAGE_SIZE] = {};
};
struct HookRemovedNotif // From hook
{
2018-09-21 09:59:07 +08:00
HookRemovedNotif(uint64_t address) : address(address) {};
2019-02-22 02:09:44 +08:00
HostNotificationType command = HOST_NOTIFICATION_RMVHOOK;
2018-09-21 09:59:07 +08:00
uint64_t address;
2018-08-23 23:53:23 +08:00
};