PVOID WINAPI DetourFindPayloadEx(REFGUID rguid, DWORD * pcbData) { for (HMODULE hMod = NULL; (hMod = DetourEnumerateModules(hMod)) != NULL;) { PVOID pvData; pvData = DetourFindPayload(hMod, rguid, pcbData); if (pvData != NULL) { return pvData; } } SetLastError(ERROR_MOD_NOT_FOUND); return NULL; }
void FindPayload(HINSTANCE hinst) { CHAR szModuleName[256]; GetModuleFileName(hinst, szModuleName, ARRAYSIZE(szModuleName)); printf(" %p : %s\n", hinst, szModuleName); ULONG cbData = 0; PBYTE pbData = (PBYTE)DetourFindPayload(hinst, my_guid, &cbData); if (pbData) { printf(" %08p..%08p : %50.50s\n", pbData, pbData + cbData, pbData); } }
BOOL WINAPI DetourRestoreAfterWith() { for (HMODULE hMod = NULL; (hMod = DetourEnumerateModules(hMod)) != NULL;) { PVOID pvData; DWORD cbData; pvData = DetourFindPayload(hMod, DETOUR_EXE_RESTORE_GUID, &cbData); if (pvData == NULL || cbData == 0) { continue; } return DetourRestoreAfterWithEx(pvData, cbData); } SetLastError(ERROR_MOD_NOT_FOUND); return FALSE; }