DWORD Mem::GetProcessId(const wchar_t* procName)
{
DWORD procId = 0;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnap != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32W procEntry;
procEntry.dwSize = sizeof(procEntry);
if (Process32FirstW(hSnap, &procEntry))
{
do
{
if (!_wcsicmp(procEntry.szExeFile, procName))
{
procId = procEntry.th32ProcessID;
break;
}
} while (Process32NextW(hSnap, &procEntry));
}
}
CloseHandle(hSnap);
return procId;
}
uintptr_t Mem::GetModuleBaseAddress(DWORD procId, const char* modName)
{
uintptr_t dwBase = 0;
do
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId);
if (hSnapshot == INVALID_HANDLE_VALUE)
{
continue;
}
MODULEENTRY32 ModuleEntry32;
ModuleEntry32.dwSize = sizeof(MODULEENTRY32);
if (Module32First(hSnapshot, &ModuleEntry32))
{
do
{
if (!strcmp(ModuleEntry32.szModule, modName))
{
dwBase = (DWORD)ModuleEntry32.modBaseAddr;
break;
}
}
while (Module32Next(hSnapshot, &ModuleEntry32));
}
CloseHandle(hSnapshot);
}
while (!dwBase);
return dwBase;
}
uintptr_t Mem::FindDMAAddy(HANDLE hProc, uintptr_t ptr, std::vector<unsigned int> offsets)
{
uintptr_t addr = ptr;
for (unsigned int i = 0; i < offsets.size(); i++)
{
ReadProcessMemory(hProc, (BYTE*)addr, &addr, sizeof(addr), 0);
addr += offsets[i];
}
return addr;
}
uintptr_t Mem::FindDMAAddyI(HANDLE hProc, uintptr_t ptr, std::vector<unsigned int> offsets)
{
uintptr_t addr = ptr;
for (unsigned int i = 0; i < offsets.size(); i++)
{
addr = *(uintptr_t*)addr;
addr += offsets[i];
}
return addr;
}
HANDLE Mem::gOpenProcess(DWORD dwProcessId)
{
return OpenProcess(PROCESS_ALL_ACCESS, NULL, dwProcessId);
}