ISXMr/libs/isxdk/include/Services.h

463 lines
14 KiB
C++

#pragma once
#pragma warning( push )
#pragma warning( disable : 4505 )
#define ISXSERVICE_MSG (1000)
// Services Messages - General (used for all services)
#define ISXSERVICE_CLIENTADDED 1
#define ISXSERVICE_CLIENTREMOVED 2
#define ISXSERVICE_DISCONNECTED 3
// Service Messages - Service-specific (will be reused for other services)
// System Service "Pulse"
#define PULSE_PULSE (ISXSERVICE_MSG+1)
#define PULSE_PREFRAME (ISXSERVICE_MSG+2)
// System Service "Console"
#define CONSOLE_OUTPUT (ISXSERVICE_MSG+1)
#define CONSOLE_OUTPUT_WITHCODES (ISXSERVICE_MSG+2)
// System Service "Memory"
#define MEM_DETOUR ((ISXSERVICE_MSG)+1)
#define MEM_MODIFY ((ISXSERVICE_MSG)+2)
#define MEM_RELEASEDETOUR ((ISXSERVICE_MSG)+3)
#define MEM_RELEASEMODIFY ((ISXSERVICE_MSG)+4)
#define MEM_ISDETOURED ((ISXSERVICE_MSG)+5)
#define MEM_ISMODIFIED ((ISXSERVICE_MSG)+6)
#define MEM_ENABLEPROTECTION ((ISXSERVICE_MSG)+7)
#define MEM_DISABLEPROTECTION ((ISXSERVICE_MSG)+8)
#define MEM_DETOURAPI ((ISXSERVICE_MSG)+9)
#define MEM_RELEASEAPIDETOUR ((ISXSERVICE_MSG)+10)
#define MEM_ISAPIDETOURED ((ISXSERVICE_MSG)+11)
// Custom Service for memory protection
#define MEMPROTECT_PROTECT ((ISXSERVICE_MSG)+1)
#define MEMPROTECT_UNPROTECT ((ISXSERVICE_MSG)+2)
// System Service "HTTP"
#define HTTPSERVICE_REQUEST ((ISXSERVICE_MSG)+1)
#define HTTPSERVICE_FAILURE ((ISXSERVICE_MSG)+2)
#define HTTPSERVICE_SUCCESS ((ISXSERVICE_MSG)+3)
// System Service "Services"
#define SERVICES_ADDED ((ISXSERVICE_MSG)+1)
#define SERVICES_REMOVED ((ISXSERVICE_MSG)+2)
// System Service "Extensions"
#define EXTENSIONS_ADDED ((ISXSERVICE_MSG)+1)
#define EXTENSIONS_REMOVED ((ISXSERVICE_MSG)+2)
// System Service "Triggers"
#define TRIGGERS_ADD ((ISXSERVICE_MSG)+1)
#define TRIGGERS_REMOVE ((ISXSERVICE_MSG)+2)
#define TRIGGERS_PROCESS ((ISXSERVICE_MSG)+3)
#define TRIGGERS_GETLINE ((ISXSERVICE_MSG)+4)
// System Service "Files"
#define FILES_OPEN ((ISXSERVICE_MSG)+1)
#define FILES_TRACKEDREAD ((ISXSERVICE_MSG)+2)
#define FILES_TRACKEDWRITE ((ISXSERVICE_MSG)+3)
#define FILES_TRACKEDCLOSE ((ISXSERVICE_MSG)+4)
#define FILES_OVERLAPPEDREAD ((ISXSERVICE_MSG)+5)
#define FILES_OVERLAPPEDWRITE ((ISXSERVICE_MSG)+6)
// System Service "Scripts"
#define SCRIPTS_ADDED ((ISXSERVICE_MSG)+1)
#define SCRIPTS_REMOVED ((ISXSERVICE_MSG)+2)
// System Service "Software Cursor"
#define SOFTWARECURSOR_ENABLE ((ISXSERVICE_MSG)+1)
#define SOFTWARECURSOR_DISABLE ((ISXSERVICE_MSG)+2)
// System Service "Script Engines"
#define SCRIPTENGINE_ADD ((ISXSERVICE_MSG)+1)
#define SCRIPTENGINE_REMOVE ((ISXSERVICE_MSG)+2)
#define SCRIPTENGINE_ADDFILEEXT ((ISXSERVICE_MSG)+3)
#define SCRIPTENGINE_REMOVEFILEEXT ((ISXSERVICE_MSG)+4)
#define SCRIPTENGINE_SCRIPTBEGINS ((ISXSERVICE_MSG)+5)
#define SCRIPTENGINE_SCRIPTENDS ((ISXSERVICE_MSG)+6)
#define SCRIPTENGINE_ADDED ((ISXSERVICE_MSG)+7)
#define SCRIPTENGINE_REMOVED ((ISXSERVICE_MSG)+8)
// System Service "Modules"
#define MODULESERVICE_LOADLIBRARY ((ISXSERVICE_MSG)+1)
#define MODULESERVICE_FREELIBRARY ((ISXSERVICE_MSG)+2)
// System Service "System"
#define SYSTEMSERVICE_DIAGNOSTICS ((ISXSERVICE_MSG)+1)
#define SYSTEMSERVICE_CRASHLOG ((ISXSERVICE_MSG)+2)
struct _SystemCrashLog
{
_EXCEPTION_POINTERS *pExceptionInfo;
const char *Identifier;
};
static bool IS_SystemCrashLog(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hSystemService, _EXCEPTION_POINTERS *pExceptionInfo, const char *CrashIdentifier)
{
_SystemCrashLog Data;
Data.pExceptionInfo=pExceptionInfo;
Data.Identifier=CrashIdentifier;
return pISInterface->ServiceRequest(pClient,hSystemService,SYSTEMSERVICE_CRASHLOG,&Data);
}
struct _ModuleServiceLibrary
{
const char *Library;
HMODULE hModule;
};
struct _ScriptEngineScriptBegins
{
class ISXScriptEngine *pInterface;
const char *ScriptName;
};
struct _ScriptEngineScriptEnds
{
class ISXScriptEngine *pInterface;
const char *ScriptName;
};
struct _ScriptEngineFileExt
{
class ISXScriptEngine *pInterface;
const char *Extension;
};
static bool IS_ScriptEngineAdd(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hScriptEngineService, class ISXScriptEngine *pInterface)
{
return pISInterface->ServiceRequest(pClient,hScriptEngineService,SCRIPTENGINE_ADD,pInterface);
}
static bool IS_ScriptEngineRemove(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hScriptEngineService, class ISXScriptEngine *pInterface)
{
return pISInterface->ServiceRequest(pClient,hScriptEngineService,SCRIPTENGINE_REMOVE,pInterface);
}
static bool IS_ScriptEngineScriptBegins(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hScriptEngineService, class ISXScriptEngine *pInterface, const char *Name)
{
_ScriptEngineScriptBegins Data;
Data.pInterface=pInterface;
Data.ScriptName=Name;
return pISInterface->ServiceRequest(pClient,hScriptEngineService,SCRIPTENGINE_SCRIPTBEGINS,&Data);
}
static bool IS_ScriptEngineScriptEnds(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hScriptEngineService, class ISXScriptEngine *pInterface, const char *Name)
{
_ScriptEngineScriptBegins Data;
Data.pInterface=pInterface;
Data.ScriptName=Name;
return pISInterface->ServiceRequest(pClient,hScriptEngineService,SCRIPTENGINE_SCRIPTENDS,&Data);
}
static bool IS_ScriptEngineAddFileExt(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hScriptEngineService, class ISXScriptEngine *pInterface, const char *Ext)
{
_ScriptEngineFileExt Data;
Data.pInterface=pInterface;
Data.Extension=Ext;
return pISInterface->ServiceRequest(pClient,hScriptEngineService,SCRIPTENGINE_ADDFILEEXT,&Data);
}
static bool IS_ScriptEngineRemoveFileExt(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hScriptEngineService, class ISXScriptEngine *pInterface, const char *Ext)
{
_ScriptEngineFileExt Data;
Data.pInterface=pInterface;
Data.Extension=Ext;
return pISInterface->ServiceRequest(pClient,hScriptEngineService,SCRIPTENGINE_REMOVEFILEEXT,&Data);
}
static bool IS_SoftwareCursorEnable(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hSoftwareCursorService, class ISXSoftwareCursorInterface *pInterface)
{
return pISInterface->ServiceRequest(pClient,hSoftwareCursorService,SOFTWARECURSOR_ENABLE,pInterface);
}
static bool IS_SoftwareCursorDisable(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hSoftwareCursorService)
{
return pISInterface->ServiceRequest(pClient,hSoftwareCursorService,SOFTWARECURSOR_DISABLE,0);
}
struct _FileOpen
{
// out
const char *FileName;
// in
bool bTrack;
};
struct _FileIO
{
// out
const char *FileName;
const void *Buffer;
unsigned int Length;
unsigned int Position;
};
struct _FileOverlappedIO
{
// out
HANDLE hFile;
const void *Buffer;
DWORD nLength;
DWORD *nActualTransfer;
LPOVERLAPPED lpOverlapped;
};
struct _EventSet
{
char *Name;
char *Command; // may be NULL
};
struct _TriggerAdd
{
// in
const char *Text;
fBlechCallback Callback;
void *pUserData;
// out
unsigned int ID;
};
struct _TriggerGetLine
{
// out
const char *Text;
};
struct HttpRequest
{
const char *URL;
void *pData;
};
struct HttpFile
{
const char *URL;
char *pBuffer;
size_t Size;
void *pData;
};
static bool IS_HttpRequest(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hHttpService, const char *URL, void *pData)
{
HttpRequest Temp;
Temp.URL=URL;
Temp.pData=pData;
return pISInterface->ServiceRequest(pClient,hHttpService,HTTPSERVICE_REQUEST,&Temp);
}
struct MemIs
{
UINT_PTR Address;
bool Is;
};
struct MemProtect
{// this struct is used only by memory protection extensions, and only for MEMPROTECT_PROTECT
UINT_PTR Address; // in
size_t Length; // in
bool Success; // out
const void *OriginalData; // in
};
struct MemDetour
{
UINT_PTR Address; // in
void *Detour; // in
void *Trampoline; // in
bool Success; // out
};
struct MemDetourAPI
{
void *Detour; // in
const char *DLLName; // in
const char *FunctionName; // in
unsigned int FunctionOrdinal; // in
bool Success; // out
};
struct MemModify
{
UINT_PTR Address; // in
void *NewData; // in
size_t Length; // in
bool Reverse; // in
bool Success; // out
};
#define ISDetourAPI(_hMemoryService_,_Detour_,_DLLName_,_FunctionName_,_FunctionOrdinal_) IS_DetourAPI(this,pISInterface,_hMemoryService_,_Detour_,_DLLName_,_FunctionName_,_FunctionOrdinal_)
static bool IS_DetourAPI(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hMemoryService, ...)
{
va_list ap;
int nArgs = 0;
int i = 0;
UINT_PTR Args[5];
va_start(ap, hMemoryService);
while (i != -1)
{
if (nArgs < 5)
{
Args[nArgs] = i;
nArgs++;
}
i = va_arg(ap, int);
}
va_end(ap);
void *Detour;
char *DLLName;
char *FunctionName;
unsigned int FunctionOrdinal;
if (nArgs == 5)
{
Detour = (PBYTE)Args[1];
DLLName = (char *)Args[2];
FunctionName = (char *)Args[3];
FunctionOrdinal = (unsigned int)Args[4];
}
else
{
return false;
}
MemDetourAPI data;
data.Detour=Detour;
data.DLLName=DLLName;
data.FunctionName=FunctionName;
data.FunctionOrdinal=FunctionOrdinal;
data.Success=false;
return pISInterface->ServiceRequest(pClient,hMemoryService,MEM_DETOURAPI,&data) && data.Success;
}
#define ISUnDetourAPI(_hMemoryService_,Address) IS_UnDetourAPI(this,pISInterface,_hMemoryService_,(UINT_PTR)Address)
static inline void IS_UnDetourAPI(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hMemoryService, UINT_PTR Address)
{
pISInterface->ServiceRequest(pClient,hMemoryService,MEM_RELEASEAPIDETOUR,(void*)Address);
}
#define ISDetour(_hMemoryService_, Address, Detour, Trampoline) IS_Detour(this,pISInterface,_hMemoryService_,(UINT_PTR)Address,Detour,Trampoline)
static bool IS_Detour(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hMemoryService, UINT_PTR Address,...)
{
va_list ap;
int nArgs = 0;
int i = 0;
UINT_PTR Args[3];
va_start(ap, Address);
while (i != -1)
{
if (nArgs < 3)
{
Args[nArgs] = i;
nArgs++;
}
i = va_arg(ap, int);
}
va_end(ap);
void *Detour;
void *Trampoline;
if (nArgs == 3)
{
Detour = (PBYTE)Args[1];
Trampoline = (PBYTE)Args[2];
}
else
{
return false;
}
MemDetour data;
data.Address=Address;
data.Detour=Detour;
data.Trampoline=Trampoline;
data.Success=false;
return pISInterface->ServiceRequest(pClient,hMemoryService,MEM_DETOUR,&data) && data.Success;
}
#define MemoryModify(_hMemoryService_,Address,NewData,Length,Reverse) Memory_Modify(this,pISInterface,_hMemoryService_,(UINT_PTR)Address,NewData,Length,Reverse)
static inline bool Memory_Modify(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hMemoryService, UINT_PTR Address, void *NewData, size_t Length, bool Reverse)
{
MemModify data;
data.Address=Address;
data.NewData=NewData;
data.Length=Length;
data.Reverse=Reverse;
data.Success=false;
return pISInterface->ServiceRequest(pClient,hMemoryService,MEM_MODIFY,&data) && data.Success;
}
#define ISUnDetour(_hMemoryService_,Address) IS_UnDetour(this,pISInterface,_hMemoryService_,(UINT_PTR)Address)
static inline void IS_UnDetour(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hMemoryService, UINT_PTR Address)
{
pISInterface->ServiceRequest(pClient,hMemoryService,MEM_RELEASEDETOUR,(void*)Address);
}
#define MemoryUnModify(_hMemoryService_,Address) Memory_UnModify(this,pISInterface,_hMemoryService_,(UINT_PTR)Address)
static inline void Memory_UnModify(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hMemoryService, UINT_PTR Address)
{
pISInterface->ServiceRequest(pClient,hMemoryService,MEM_RELEASEMODIFY,(void*)Address);
}
#define ISAddTrigger(_hTriggerService_,Text,Callback,pUserData) IS_AddTrigger(this,pISInterface,_hTriggerService_,Text,Callback,pUserData)
static inline unsigned int IS_AddTrigger(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hTriggerService, const char *Text, fBlechCallback Callback, void *pUserData=0)
{
_TriggerAdd data;
data.Callback=Callback;
data.ID=0;
data.pUserData=pUserData;
data.Text=Text;
pISInterface->ServiceRequest(pClient,hTriggerService,TRIGGERS_ADD,&data);
return data.ID;
}
#define ISRemoveTrigger(_hTriggerService_,ID) IS_RemoveTrigger(this,pISInterface,_hTriggerService_,ID)
static inline void IS_RemoveTrigger(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hTriggerService, unsigned int ID)
{
pISInterface->ServiceRequest(pClient,hTriggerService,TRIGGERS_REMOVE,(void*)(UINT_PTR)ID);
}
#define ISCheckTriggers(_hTriggerService_,Text) IS_CheckTriggers(this,pISInterface,_hTriggerService_,Text)
static inline void IS_CheckTriggers(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hTriggerService, const char *Text)
{
pISInterface->ServiceRequest(pClient,hTriggerService,TRIGGERS_PROCESS,(void*)Text);
}
#define ISGetTriggerLine(_hTriggerService_) IS_GetTriggerLine(this,pISInterface,_hTriggerService_)
static inline const char *IS_GetTriggerLine(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hTriggerService)
{
_TriggerGetLine data;
data.Text=0;
if (!pISInterface->ServiceRequest(pClient,hTriggerService,TRIGGERS_GETLINE,&data))
return "";
return data.Text;
}
/*
#define ISSetEvent(_hEventService_,Name,Command) IS_SetEvent(this,pISInterface,_hEventService_,Name,Command)
static inline void IS_SetEvent(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hEventService, char *Name, char *Command)
{
_EventSet data;
data.Command=Command;
data.Name=Name;
pISInterface->ServiceRequest(pClient,hEventService,EVENTS_SET,&data);
}
#define ISRemoveEvent(_hEventService_,Name) IS_RemoveEvent(this,pISInterface,_hEventService_,Name)
static inline void IS_RemoveEvent(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hEventService, char *Name)
{
pISInterface->ServiceRequest(pClient,hEventService,EVENTS_REMOVE,(void*)Name);
}
#define ISExecuteEvent(_hEventService_,Name) IS_ExecuteEvent(this,pISInterface,_hEventService_,Name)
static inline void IS_ExecuteEvent(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hEventService, char *Name)
{
pISInterface->ServiceRequest(pClient,hEventService,EVENTS_EXECUTE,(void*)Name);
}
/**/
#pragma warning( pop )