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

Function DetourEnumerateImportsEx

lib_fiber/cpp/src/detours/modules.cpp:544–643  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

542}
543
544BOOL WINAPI DetourEnumerateImportsEx(_In_opt_ HMODULE hModule,
545 _In_opt_ PVOID pContext,
546 _In_opt_ PF_DETOUR_IMPORT_FILE_CALLBACK pfImportFile,
547 _In_opt_ PF_DETOUR_IMPORT_FUNC_CALLBACK_EX pfImportFunc)
548{
549 PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)hModule;
550 if (hModule == NULL) {
551 pDosHeader = (PIMAGE_DOS_HEADER)GetModuleHandleW(NULL);
552 }
553
554 __try {
555#pragma warning(suppress:6011) // GetModuleHandleW(NULL) never returns NULL.
556 if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE) {
557 SetLastError(ERROR_BAD_EXE_FORMAT);
558 return FALSE;
559 }
560
561 PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)((PBYTE)pDosHeader +
562 pDosHeader->e_lfanew);
563 if (pNtHeader->Signature != IMAGE_NT_SIGNATURE) {
564 SetLastError(ERROR_INVALID_EXE_SIGNATURE);
565 return FALSE;
566 }
567 if (pNtHeader->FileHeader.SizeOfOptionalHeader == 0) {
568 SetLastError(ERROR_EXE_MARKED_INVALID);
569 return FALSE;
570 }
571
572 PIMAGE_IMPORT_DESCRIPTOR iidp
573 = (PIMAGE_IMPORT_DESCRIPTOR)
574 RvaAdjust(pDosHeader,
575 pNtHeader->OptionalHeader
576 .DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
577
578 if (iidp == NULL) {
579 SetLastError(ERROR_EXE_MARKED_INVALID);
580 return FALSE;
581 }
582
583 for (; iidp->OriginalFirstThunk != 0; iidp++) {
584
585 PCSTR pszName = (PCHAR)RvaAdjust(pDosHeader, iidp->Name);
586 if (pszName == NULL) {
587 SetLastError(ERROR_EXE_MARKED_INVALID);
588 return FALSE;
589 }
590
591 PIMAGE_THUNK_DATA pThunks = (PIMAGE_THUNK_DATA)
592 RvaAdjust(pDosHeader, iidp->OriginalFirstThunk);
593 PVOID * pAddrs = (PVOID *)
594 RvaAdjust(pDosHeader, iidp->FirstThunk);
595
596 HMODULE hFile = DetourGetContainingModule(pAddrs[0]);
597
598 if (pfImportFile != NULL) {
599 if (!pfImportFile(pContext, hFile, pszName)) {
600 break;
601 }

Callers 1

DetourEnumerateImportsFunction · 0.85

Calls 2

RvaAdjustFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…