MCPcopy Create free account
hub / github.com/Schnocker/NoEye / GetProcAddressW

Function GetProcAddressW

NoEye_Service/CMap.cpp:425–512  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

423 return Function;
424 }
425 FARPROC GetProcAddressW(WDLL* wDll, LPCWSTR lpName)
426 {
427
428 DWORD Oridinal = reinterpret_cast<DWORD>(lpName), OrdSize = 0;
429 size_t lpNameSize = 0;
430 LPSTR lpOrdName = "";
431 PIMAGE_EXPORT_DIRECTORY ImageDirectory = 0;
432 PIMAGE_NT_HEADERS64 Nt64Header = 0;
433 if (!wDll || !lpName)
434 {
435 SetLastError(4001);
436 return FALSE;
437 }
438 if (!wDll->NtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress ||
439 !wDll->NtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size)
440 {
441 SetLastError(4002);
442 return FALSE;
443 }
444 switch (wDll->NtHeader->OptionalHeader.Magic)
445 {
446 case IMAGE_NT_OPTIONAL_HDR32_MAGIC:
447 ImageDirectory = reinterpret_cast<PIMAGE_EXPORT_DIRECTORY>(reinterpret_cast<DWORD_PTR>(wDll->Image) + wDll->NtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
448 break;
449 case IMAGE_NT_OPTIONAL_HDR64_MAGIC:
450 ImageDirectory = reinterpret_cast<PIMAGE_EXPORT_DIRECTORY>(reinterpret_cast<DWORD_PTR>(wDll->Image) + wDll->NtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
451 break;
452 default:
453 SetLastError(3999);
454 return FALSE;
455 break;
456 }
457
458 if (!ImageDirectory)
459 {
460 SetLastError(4003);
461 return FALSE;
462 }
463
464 if (Oridinal < 0x10000)
465 {
466 if (Oridinal < ImageDirectory->Base)
467 {
468 SetLastError(4004);
469 return FALSE;
470 }
471 Oridinal -= ImageDirectory->Base;
472 }
473
474 if ((lpNameSize = wcslen(lpName)))
475 {
476 OrdSize = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, lpName, -1, 0, 0, 0, 0);
477 if (!OrdSize)
478 {
479 SetLastError(4005);
480 return FALSE;
481 }
482 lpOrdName = new char[OrdSize];

Callers 1

GetProcAddressAFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected