MCPcopy Create free account
hub / github.com/NtQuery/Scylla / getProcessModules

Method getProcessModules

Scylla/ProcessAccessHelp.cpp:653–706  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

651}
652
653bool ProcessAccessHelp::getProcessModules(HANDLE hProcess, std::vector<ModuleInfo> &moduleList)
654{
655 ModuleInfo module;
656 WCHAR filename[MAX_PATH*2] = {0};
657 DWORD cbNeeded = 0;
658 bool retVal = false;
659 DeviceNameResolver deviceNameResolver;
660
661 moduleList.reserve(20);
662
663 EnumProcessModules(hProcess, 0, 0, &cbNeeded);
664
665 HMODULE* hMods=(HMODULE*)malloc(cbNeeded*sizeof(HMODULE));
666
667 if (hMods)
668 {
669 if(EnumProcessModules(hProcess, hMods, cbNeeded, &cbNeeded))
670 {
671 for(unsigned int i = 1; i < (cbNeeded/sizeof(HMODULE)); i++) //skip first module!
672 {
673 module.modBaseAddr = (DWORD_PTR)hMods[i];
674 module.modBaseSize = (DWORD)getSizeOfImageProcess(hProcess, module.modBaseAddr);
675 module.isAlreadyParsed = false;
676 module.parsing = false;
677
678 filename[0] = 0;
679 module.fullPath[0] = 0;
680
681 if (GetMappedFileNameW(hProcess, (LPVOID)module.modBaseAddr, filename, _countof(filename)) > 0)
682 {
683 if (!deviceNameResolver.resolveDeviceLongNameToShort(filename, module.fullPath))
684 {
685 if (!GetModuleFileNameExW(hProcess, (HMODULE)module.modBaseAddr, module.fullPath, _countof(module.fullPath)))
686 {
687 wcscpy_s(module.fullPath, filename);
688 }
689 }
690 }
691 else
692 {
693 GetModuleFileNameExW(hProcess, (HMODULE)module.modBaseAddr, module.fullPath, _countof(module.fullPath));
694 }
695
696 moduleList.push_back(module);
697 }
698
699 retVal = true;
700 }
701
702 free(hMods);
703 }
704
705 return retVal;
706}
707
708bool ProcessAccessHelp::getMemoryRegionFromAddress(DWORD_PTR address, DWORD_PTR * memoryRegionBase, SIZE_T * memoryRegionSize)
709{

Callers

nothing calls this directly

Calls 1

Tested by

no test coverage detected