Ejemplo n.º 1
0
bool ProcessAccessHelp::getProcessModules(HANDLE hProcess, std::vector<ModuleInfo> &moduleList)
{
    ModuleInfo module;
    WCHAR filename[MAX_PATH*2] = {0};
    DWORD cbNeeded = 0;
    bool retVal = false;
    DeviceNameResolver deviceNameResolver;

    moduleList.reserve(20);

    EnumProcessModules(hProcess, 0, 0, &cbNeeded);

    HMODULE* hMods=(HMODULE*)malloc(cbNeeded*sizeof(HMODULE));

    if (hMods)
    {
        if(EnumProcessModules(hProcess, hMods, cbNeeded, &cbNeeded))
        {
            for(unsigned int i = 1; i < (cbNeeded/sizeof(HMODULE)); i++) //skip first module!
            {
                module.modBaseAddr = (DWORD_PTR)hMods[i];
                module.modBaseSize = (DWORD)getSizeOfImageProcess(hProcess, module.modBaseAddr);
                module.isAlreadyParsed = false;
                module.parsing = false;

                filename[0] = 0;
                module.fullPath[0] = 0;

                if (GetMappedFileNameW(hProcess, (LPVOID)module.modBaseAddr, filename, _countof(filename)) > 0)
                {
                    if (!deviceNameResolver.resolveDeviceLongNameToShort(filename, module.fullPath))
                    {
                        if (!GetModuleFileNameExW(hProcess, (HMODULE)module.modBaseAddr, module.fullPath, _countof(module.fullPath)))
                        {
                            wcscpy_s(module.fullPath, filename);
                        }
                    }
                }
                else
                {
                    GetModuleFileNameExW(hProcess, (HMODULE)module.modBaseAddr, module.fullPath, _countof(module.fullPath));
                }

                moduleList.push_back(module);
            }

            retVal = true;
        }

        free(hMods);
    }

    return retVal;
}
Ejemplo n.º 2
0
bool ProcessAccessHelp::getSizeOfImageCurrentProcess()
{
    DWORD_PTR newSizeOfImage = getSizeOfImageProcess(ProcessAccessHelp::hProcess, ProcessAccessHelp::targetImageBase);

    if (newSizeOfImage != 0)
    {
        ProcessAccessHelp::targetSizeOfImage = newSizeOfImage;
        return true;
    }
    else
    {
        return false;
    }
}
Ejemplo n.º 3
0
bool GetProcessList(HWND hwndDlg) 
{
	HANDLE hProcessSnap = 0;
	PROCESSENTRY32 pe32 = {0};
	HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
	MODULEENTRY32 me32 = {0};
	Process process;
	HANDLE hProcess = 0;

	HWND hCombo = GetDlgItem(hwndDlg, IDC_COMBO_PROCESS);

	if (!hCombo)
		return false;

	processList.clear();
	processList.reserve(34);

	hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if(hProcessSnap == INVALID_HANDLE_VALUE)
	{
		MessageBox(0, TEXT("CreateToolhelp32Snapshot failed"), TEXT("Error"), MB_ICONERROR);
		return false;
	}

	pe32.dwSize = sizeof(PROCESSENTRY32);

	if(!Process32First(hProcessSnap, &pe32))
	{
		CloseHandle(hProcessSnap);
		MessageBox(0, TEXT("Process32First failed"), TEXT("Error"), MB_ICONERROR);
		return false;
	}

	do
	{
		//filter process list
		if (pe32.th32ProcessID > 4)
		{
			process.PID = pe32.th32ProcessID;

			hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, process.PID);
			if(hModuleSnap != INVALID_HANDLE_VALUE)
			{
				me32.dwSize = sizeof(MODULEENTRY32);

				Module32First(hModuleSnap, &me32);
				process.imageBase = (DWORD_PTR)me32.hModule;
				_tcscpy_s(process.fullPath, MAX_PATH, me32.szExePath);
				CloseHandle(hModuleSnap);

				hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, NULL, process.PID);
				if(hProcess)
				{
					process.imageSize = getSizeOfImageProcess(hProcess,process.imageBase);

					CloseHandle(hProcess);

					if (process.imageSize != 0)
					{
						_tcscpy_s(process.filename, MAX_PATH, pe32.szExeFile);

						processList.push_back(process);
					}

				}
			}
		}
	} while(Process32Next(hProcessSnap, &pe32));

	CloseHandle(hProcessSnap);

	for (size_t i = 0; i < processList.size(); i++)
	{
		_stprintf_s(logbuf, _countof(logbuf),TEXT("0x%04X - %s - %s"),processList[i].PID,processList[i].filename,processList[i].fullPath);
		SendMessage(hCombo,CB_ADDSTRING,0,(LPARAM)logbuf);
	}

	return true;
}