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

Function DetourGetContainingModule

lib_fiber/cpp/src/detours/modules.cpp:406–451  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

404}
405
406HMODULE WINAPI DetourGetContainingModule(_In_ PVOID pvAddr)
407{
408 MEMORY_BASIC_INFORMATION mbi;
409 ZeroMemory(&mbi, sizeof(mbi));
410
411 __try {
412 if (VirtualQuery(pvAddr, &mbi, sizeof(mbi)) <= 0) {
413 SetLastError(ERROR_BAD_EXE_FORMAT);
414 return NULL;
415 }
416
417 // Skip uncommitted regions and guard pages.
418 //
419 if ((mbi.State != MEM_COMMIT) ||
420 ((mbi.Protect & 0xff) == PAGE_NOACCESS) ||
421 (mbi.Protect & PAGE_GUARD)) {
422 SetLastError(ERROR_BAD_EXE_FORMAT);
423 return NULL;
424 }
425
426 PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)mbi.AllocationBase;
427 if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE) {
428 SetLastError(ERROR_BAD_EXE_FORMAT);
429 return NULL;
430 }
431
432 PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)((PBYTE)pDosHeader +
433 pDosHeader->e_lfanew);
434 if (pNtHeader->Signature != IMAGE_NT_SIGNATURE) {
435 SetLastError(ERROR_INVALID_EXE_SIGNATURE);
436 return NULL;
437 }
438 if (pNtHeader->FileHeader.SizeOfOptionalHeader == 0) {
439 SetLastError(ERROR_EXE_MARKED_INVALID);
440 return NULL;
441 }
442 SetLastError(NO_ERROR);
443
444 return (HMODULE)pDosHeader;
445 }
446 __except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
447 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
448 SetLastError(ERROR_INVALID_EXE_SIGNATURE);
449 return NULL;
450 }
451}
452
453
454static inline PBYTE RvaAdjust(_Pre_notnull_ PIMAGE_DOS_HEADER pDosHeader, _In_ DWORD raddr)

Callers 2

DetourEnumerateImportsExFunction · 0.85
DetourFreePayloadFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…