From 32bdf1580a853dbe96528d957e655970faa2c0b2 Mon Sep 17 00:00:00 2001 From: Duncan Ogilvie Date: Sun, 30 Aug 2026 23:30:05 +0200 Subject: [PATCH] Move Windows APIs into TitanEngine.h for DbgEng compatibility --- TitanEngine/TitanEngine.Debugger.Memory.cpp | 20 +++++++ TitanEngine/TitanEngine.Process.cpp | 65 +++++++++++++++++++++ TitanEngine/TitanEngine.def | 17 ++++++ TitanEngine/definitions.h | 17 ++++++ 4 files changed, 119 insertions(+) diff --git a/TitanEngine/TitanEngine.Debugger.Memory.cpp b/TitanEngine/TitanEngine.Debugger.Memory.cpp index 80bdd52..eb9acbe 100644 --- a/TitanEngine/TitanEngine.Debugger.Memory.cpp +++ b/TitanEngine/TitanEngine.Debugger.Memory.cpp @@ -461,3 +461,23 @@ __declspec(dllexport) bool TITCALL MemoryWriteSafe(HANDLE hProcess, LPVOID lpBas return retValue; } + +__declspec(dllexport) SIZE_T TITCALL MemoryQuerySafe(HANDLE hProcess, LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength) +{ + return VirtualQueryEx(hProcess, lpAddress, lpBuffer, dwLength); +} + +__declspec(dllexport) LPVOID TITCALL MemoryAllocSafe(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect) +{ + return VirtualAllocEx(hProcess, lpAddress, dwSize, flAllocationType, flProtect); +} + +__declspec(dllexport) bool TITCALL MemoryFreeSafe(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType) +{ + return !!VirtualFreeEx(hProcess, lpAddress, dwSize, dwFreeType); +} + +__declspec(dllexport) bool TITCALL MemoryProtectSafe(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect) +{ + return !!VirtualProtectEx(hProcess, lpAddress, dwSize, flNewProtect, lpflOldProtect); +} diff --git a/TitanEngine/TitanEngine.Process.cpp b/TitanEngine/TitanEngine.Process.cpp index 0f256df..cefa75a 100644 --- a/TitanEngine/TitanEngine.Process.cpp +++ b/TitanEngine/TitanEngine.Process.cpp @@ -140,4 +140,69 @@ __declspec(dllexport) HANDLE TITCALL TitanOpenProcess(DWORD dwDesiredAccess, boo __declspec(dllexport) HANDLE TITCALL TitanOpenThread(DWORD dwDesiredAccess, bool bInheritHandle, DWORD dwThreadId) { return EngineOpenThread(dwDesiredAccess, bInheritHandle, dwThreadId); +} + +__declspec(dllexport) bool TITCALL TitanCloseHandle(HANDLE hEngineHandle) +{ + return EngineCloseHandle(hEngineHandle); +} + +__declspec(dllexport) bool TITCALL ProcessIsWow64(HANDLE hProcess, PBOOL isWow64) +{ + return !!IsWow64Process(hProcess, isWow64); +} + +__declspec(dllexport) bool TITCALL TitanTerminateProcess(HANDLE hProcess, DWORD exitCode) +{ + return !!TerminateProcess(hProcess, exitCode); +} + +__declspec(dllexport) bool TITCALL TitanDebugBreakProcess(HANDLE hProcess) +{ + return !!DebugBreakProcess(hProcess); +} + +__declspec(dllexport) HANDLE TITCALL TitanCreateRemoteThread(HANDLE hProcess, LPTHREAD_START_ROUTINE start, LPVOID argument, DWORD creationFlags, LPDWORD threadId) +{ + return CreateRemoteThread(hProcess, nullptr, 0, start, argument, creationFlags, threadId); +} + +__declspec(dllexport) DWORD TITCALL TitanSuspendThread(HANDLE hThread) +{ + return SuspendThread(hThread); +} + +__declspec(dllexport) DWORD TITCALL TitanResumeThread(HANDLE hThread) +{ + return ResumeThread(hThread); +} + +__declspec(dllexport) bool TITCALL TitanTerminateThread(HANDLE hThread, DWORD exitCode) +{ + return !!TerminateThread(hThread, exitCode); +} + +__declspec(dllexport) DWORD TITCALL TitanGetThreadId(HANDLE hThread) +{ + return GetThreadId(hThread); +} + +__declspec(dllexport) int TITCALL TitanGetThreadPriority(HANDLE hThread) +{ + return GetThreadPriority(hThread); +} + +__declspec(dllexport) bool TITCALL TitanSetThreadPriority(HANDLE hThread, int priority) +{ + return !!SetThreadPriority(hThread, priority); +} + +__declspec(dllexport) bool TITCALL TitanGetThreadTimes(HANDLE hThread, LPFILETIME creation, LPFILETIME exit, LPFILETIME kernel, LPFILETIME user) +{ + return !!GetThreadTimes(hThread, creation, exit, kernel, user); +} + +__declspec(dllexport) bool TITCALL TitanQueryThreadCycleTime(HANDLE hThread, PULONG64 cycleTime) +{ + return !!QueryThreadCycleTime(hThread, cycleTime); } \ No newline at end of file diff --git a/TitanEngine/TitanEngine.def b/TitanEngine/TitanEngine.def index 0237526..fd51a08 100644 --- a/TitanEngine/TitanEngine.def +++ b/TitanEngine/TitanEngine.def @@ -55,6 +55,10 @@ ConvertFileOffsetToVA ConvertFileOffsetToVAEx MemoryReadSafe MemoryWriteSafe +MemoryQuerySafe +MemoryAllocSafe +MemoryFreeSafe +MemoryProtectSafe GetPE32Data GetPE32DataW GetPE32DataFromMappedFile @@ -389,6 +393,19 @@ GetActiveProcessId GetActiveProcessIdW EnumProcessesWithLibrary TitanOpenProcess +TitanCloseHandle +ProcessIsWow64 +TitanTerminateProcess +TitanDebugBreakProcess +TitanCreateRemoteThread +TitanSuspendThread +TitanResumeThread +TitanTerminateThread +TitanGetThreadId +TitanGetThreadPriority +TitanSetThreadPriority +TitanGetThreadTimes +TitanQueryThreadCycleTime EngineFakeMissingDependencies EngineDeleteCreatedDependencies EngineCreateMissingDependencies diff --git a/TitanEngine/definitions.h b/TitanEngine/definitions.h index 0f110f1..b799ff7 100644 --- a/TitanEngine/definitions.h +++ b/TitanEngine/definitions.h @@ -75,6 +75,10 @@ __declspec(dllexport) ULONG_PTR TITCALL ConvertFileOffsetToVA(ULONG_PTR FileMapV __declspec(dllexport) ULONG_PTR TITCALL ConvertFileOffsetToVAEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool ReturnType); __declspec(dllexport) bool TITCALL MemoryReadSafe(HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesRead); __declspec(dllexport) bool TITCALL MemoryWriteSafe(HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesWritten); +__declspec(dllexport) SIZE_T TITCALL MemoryQuerySafe(HANDLE hProcess, LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength); +__declspec(dllexport) LPVOID TITCALL MemoryAllocSafe(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect); +__declspec(dllexport) bool TITCALL MemoryFreeSafe(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType); +__declspec(dllexport) bool TITCALL MemoryProtectSafe(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect); // TitanEngine.Realigner.functions: __declspec(dllexport) bool TITCALL FixHeaderCheckSum(char* szFileName); __declspec(dllexport) bool TITCALL FixHeaderCheckSumW(wchar_t* szFileName); @@ -355,6 +359,19 @@ __declspec(dllexport) long TITCALL GetActiveProcessId(char* szImageName); __declspec(dllexport) long TITCALL GetActiveProcessIdW(wchar_t* szImageName); __declspec(dllexport) void TITCALL EnumProcessesWithLibrary(char* szLibraryName, void* EnumFunction); __declspec(dllexport) HANDLE TITCALL TitanOpenProcess(DWORD dwDesiredAccess, bool bInheritHandle, DWORD dwProcessId); +__declspec(dllexport) bool TITCALL TitanCloseHandle(HANDLE hEngineHandle); +__declspec(dllexport) bool TITCALL ProcessIsWow64(HANDLE hProcess, PBOOL isWow64); +__declspec(dllexport) bool TITCALL TitanTerminateProcess(HANDLE hProcess, DWORD exitCode); +__declspec(dllexport) bool TITCALL TitanDebugBreakProcess(HANDLE hProcess); +__declspec(dllexport) HANDLE TITCALL TitanCreateRemoteThread(HANDLE hProcess, LPTHREAD_START_ROUTINE start, LPVOID argument, DWORD creationFlags, LPDWORD threadId); +__declspec(dllexport) DWORD TITCALL TitanSuspendThread(HANDLE hThread); +__declspec(dllexport) DWORD TITCALL TitanResumeThread(HANDLE hThread); +__declspec(dllexport) bool TITCALL TitanTerminateThread(HANDLE hThread, DWORD exitCode); +__declspec(dllexport) DWORD TITCALL TitanGetThreadId(HANDLE hThread); +__declspec(dllexport) int TITCALL TitanGetThreadPriority(HANDLE hThread); +__declspec(dllexport) bool TITCALL TitanSetThreadPriority(HANDLE hThread, int priority); +__declspec(dllexport) bool TITCALL TitanGetThreadTimes(HANDLE hThread, LPFILETIME creation, LPFILETIME exit, LPFILETIME kernel, LPFILETIME user); +__declspec(dllexport) bool TITCALL TitanQueryThreadCycleTime(HANDLE hThread, PULONG64 cycleTime); __declspec(dllexport) HANDLE TITCALL TitanOpenThread(DWORD dwDesiredAccess, bool bInheritHandle, DWORD dwThreadId); // TitanEngine.TLSFixer.functions: __declspec(dllexport) bool TITCALL TLSBreakOnCallBack(LPVOID ArrayOfCallBacks, DWORD NumberOfCallBacks, LPVOID bpxCallBack);