首页
社区
课程
招聘
[原创][源码]任务管理器:进程+线程+模块+服务+HOOK
发表于: 2015-10-29 14:43 15066

[原创][源码]任务管理器:进程+线程+模块+服务+HOOK

2015-10-29 14:43
15066

这是我看雪第三篇主题帖了,虽然依旧不是闪闪发光的那种。

第一篇:
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));

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 3
支持
分享
最新回复 (16)
雪    币: 80
活跃值: (132)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
基础扎实
2015-10-29 14:52
0
雪    币: 60
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我在想如果是纯Win32来做 会不会很费力?
2015-10-29 15:04
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
4
hah  谢谢    我会继续努力滴
2015-10-29 15:09
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
5
win32控制台的话  的确  
只不过是减少了按钮点击、右键菜单之类的操作  
然后我们还是让他显示PRINTF 只不过那个窗口会超大超长
然后我们是通过输入按键实现相关操作 再定义更多宏  相对来说确实复杂
2015-10-29 15:14
0
雪    币: 4473
活跃值: (5074)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
换个压缩软件
2015-10-29 15:52
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
7
好了
2015-10-29 16:45
0
雪    币: 4473
活跃值: (5074)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
8
你之前的用的什么快压,别人都打不开
2015-10-29 16:54
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
9
我得卸载它。。。
2015-10-29 17:07
0
雪    币: 4473
活跃值: (5074)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
10
2015-10-29 17:10
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
任务管理器的精髓是查看各个进程cpu占用百分比
2015-10-29 18:10
0
雪    币: 22
活跃值: (242)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
12
纯Ring3。。。
2015-10-29 19:19
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
发这种东西的人太多了,所以不会闪闪发光了。换作几年前,发个简单的PE解析器都能加精。
2015-11-1 01:01
0
雪    币: 229
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
感谢楼主分享
2015-11-10 18:01
0
雪    币: 140
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
看不懂了
2015-11-10 19:03
0
雪    币: 11
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
卤煮已经是个小神了,
2015-12-18 09:12
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
可以的
2017-4-17 14:18
0
游客
登录 | 注册 方可回帖
返回
//