MCPcopy Create free account
hub / github.com/acl-dev/acl / FindPayloadInRemoteDetourSection

Function FindPayloadInRemoteDetourSection

lib_fiber/cpp/src/detours/creatwth.cpp:189–241  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

187}
188
189static PVOID FindPayloadInRemoteDetourSection(_In_ HANDLE hProcess,
190 _In_ REFGUID rguid,
191 _Out_opt_ DWORD *pcbData,
192 _In_ PVOID pvRemoteDetoursSection)
193{
194 if (pcbData) {
195 *pcbData = 0;
196 }
197
198 PBYTE pbData = (PBYTE)pvRemoteDetoursSection;
199
200 DETOUR_SECTION_HEADER header;
201 if (!ReadProcessMemory(hProcess, pbData, &header, sizeof(header), NULL)) {
202 DETOUR_TRACE(("ReadProcessMemory(dsh@%p..%p) failed: %lu\n",
203 pbData,
204 pbData + sizeof(header),
205 GetLastError()));
206 return NULL;
207 }
208
209 if (header.cbHeaderSize < sizeof(DETOUR_SECTION_HEADER) ||
210 header.nSignature != DETOUR_SECTION_HEADER_SIGNATURE) {
211 SetLastError(ERROR_EXE_MARKED_INVALID);
212 return NULL;
213 }
214
215 if (header.nDataOffset == 0) {
216 header.nDataOffset = header.cbHeaderSize;
217 }
218
219 for (PVOID pvSection = pbData + header.nDataOffset; pvSection < pbData + header.cbDataSize;) {
220 DETOUR_SECTION_RECORD section;
221 if (!ReadProcessMemory(hProcess, pvSection, &section, sizeof(section), NULL)) {
222 DETOUR_TRACE(("ReadProcessMemory(dsr@%p..%p) failed: %lu\n",
223 pvSection,
224 (PBYTE)pvSection + sizeof(section),
225 GetLastError()));
226 return NULL;
227 }
228
229 if (DetourAreSameGuid(section.guid, rguid)) {
230 if (pcbData) {
231 *pcbData = section.cbBytes - sizeof(section);
232 }
233 SetLastError(NO_ERROR);
234 return (DETOUR_SECTION_RECORD *)pvSection + 1;
235 }
236
237 pvSection = (PBYTE)pvSection + section.cbBytes;
238 }
239
240 return NULL;
241}
242
243_Success_(return != NULL)
244PVOID WINAPI DetourFindRemotePayload(_In_ HANDLE hProcess,

Callers 1

DetourFindRemotePayloadFunction · 0.85

Calls 1

DetourAreSameGuidFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…