这是我看雪第三篇主题帖了,虽然依旧不是闪闪发光的那种。
第一篇:
http://bbs.pediy.com/showthread.php?t=203541
第二篇:
http://bbs.pediy.com/showthread.php?t=204845
感兴趣可以移步看看。
软件界面
----------------------------------------------------
到目前编程时间跌跌撞撞一路走来已经有三个月了吧,想想三个月前和现在的我还是有点唏嘘。
下面进入正题了。
1.进程
需要用到的关键函数:
CreateToolhelp32Snapshot()首先获取进程快照句柄
PROCESSENTRY32 此为一个结构体保存了进程相关信息
Process32FirstW()获取第一个进程
Process32Next()获取下一个 用循环遍历
此为大体框架了 更多信息请下载源码细细观看。。。
ProcessDlg.h ProcessDlg.cpp
m_VecProList.clear();//清除VECTOR
m_VecPriority.clear();
m_VecMemory.clear();
m_VevCpu.clear();
m_ProList.DeleteAllItems();
isInitEnd = true;
double cpu;
stcpe32.dwSize=sizeof(PROCESSENTRY32);
//创建一个进程相关的快照句柄
hProessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProessSnap==INVALID_HANDLE_VALUE)
{
return ;
}
if (!Process32FirstW(hProessSnap,&stcpe32))
{
CloseHandle(hProessSnap); //获取系统进程
return ;
}
do
{
PROCESSENTRY32 stcInfo={sizeof(PROCESSENTRY32)};//初始化结构体大小
//获取进程映像路径
wcscpy_s(stcInfo.szExeFile,stcpe32.szExeFile);
hProcess=OpenProcess( //打开进程句柄
PROCESS_QUERY_INFORMATION|PROCESS_VM_READ ,
FALSE,stcpe32.th32ProcessID);
if (hProcess)
{
stcInfo.pcPriClassBase=GetPriorityClass(hProcess);//获取优先级
}
GetProcessMemoryInfo(hProcess,&pmc,sizeof(pmc));//获得工作集 workingsetsize
cpu=Get_cpu_usage(stcpe32.th32ProcessID);//获取cpu占有率
GetProcessImageFileName(hProcess,ProfilePath,MAX_PATH);
GetModuleFileNameEx(hProcess,NULL,ProfilePath,MAX_PATH);//获取文件路径
CString NewProfilePath(ProfilePath);
NewProfilePath.Replace(_T("\\Device\\HarddiskVolume1\\"),_T("c:\\"));//将\\Device\\HarddiskVolume1\\ 替换为c:\\
NewProfilePath.Replace(_T("\\Device\\HarddiskVolume2\\"),_T("c:\\"));
stcInfo.th32ProcessID=stcpe32.th32ProcessID;
stcInfo.cntThreads=stcpe32.cntThreads;
stcInfo.th32ParentProcessID=stcpe32.th32ParentProcessID;
m_ProList.InsertItem(0,stcpe32.szExeFile);
_stprintf_s(Pid,_T("%d"),stcpe32.th32ProcessID);///PID
_stprintf_s(Memory,_T("%d %s"),pmc.WorkingSetSize/1024,_T("k"));
_stprintf_s(CpuUtilization,_T("%d"),cpu);
Priorit=InitializePriority(stcInfo.pcPriClassBase);
m_ProList.SetItemText(0,1,Pid);//插入PID
m_ProList.SetItemText(0,2,Memory);//插入工作集
m_ProList.SetItemText(0,3,CpuUtilization);//插入cpu占用率
m_ProList.SetItemText(0,4,Priorit);//
//将获取的相关信息保存到向量中
m_ProList.SetItemText(0,5,NewProfilePath);
m_VecProList.push_back(stcInfo);
m_VecPriority.push_back(Priorit);//保存优先级
m_VecMemory.push_back(pmc.WorkingSetSize/1024);//保存内存
m_VevCpu.push_back(cpu);//保存CPU
} while (Process32Next(hProessSnap,&stcpe32));
CloseHandle(hProcess);
CloseHandle(hProessSnap);
SetWindowText(m_StrMoudle);//设置查看模块时的进程标题
MODULEENTRY32 mod32={sizeof(MODULEENTRY32)};
HANDLE hMoudleSnap=INVALID_HANDLE_VALUE;
hMoudleSnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,m_ProCurrPid);//m_ProCurrPid为该模块进程ID
if (hMoudleSnap==INVALID_HANDLE_VALUE)
{
return;
}
if (!Module32First(hMoudleSnap,&mod32))
{
CloseHandle(hMoudleSnap);
return;
}
m_VecModList.clear();
do
{
_stprintf_s(MoudleId,_T("%d"),mod32.modBaseSize);
_stprintf_s(MoudleBaseAdd,_T("%x"),mod32.modBaseAddr);
m_MoudleList.InsertItem(0,MoudleId);
m_MoudleList.SetItemText(0,1,MoudleBaseAdd);
m_MoudleList.SetItemText(0,2,mod32.szExePath);
m_VecModList.push_back(mod32);
} while (Module32Next(hMoudleSnap,&mod32));
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)