Windows系统下的进程枚举问题研究

来源 :硅谷 | 被引量 : 0次 | 上传用户:mir_lww0
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  [摘要]讨论使用Windows工具库API函数CreateToolhelp32Snapshot对系统进程进行枚举的基本方法。以VC++6.0为开发平台实现了一个进程查看和结束程序。
  [关键词]进程 枚举 VC++ MFC
  中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)0920055-01
  
  一、进程枚举就一些基本概念
  
  (一)进程
  进程就是应用程序的运行实例,是应用程序的一次动态执行。
  (二)进程枚举
  进程枚举就是通过一定的方法获得当前系统运行的所有进程的ID,进而根据进程ID获得和进程相关的其他信息,比如进程的CPU和内存占用率、进程加载的DLL模块、进程所创建的线程数和进程所对应的映像名称等等。
  
  二、使用工具库API函数进行进程枚举
  
  使用工具库API函数进行进程枚举是一种最常用的进程枚举方法。它主要用到以下几个API函数:CreateToolhelp32Snapshot、Process32First、
  Process32Next。
  (一)主要相关API函数
  API函数CreateToolhelp32Snapshot的功能就是给系统拍快照。它的原型如下:HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags, DWORD th32ProcessID),其中参数dwFlags指定了快照中包合的内容。它的值常选为TH32CS_SNAPHEAPLIST、TH32CS_SNAPMODULE、TH32CS_SNAPPROCES
  S、TH32CS_SNAPTHREAD中的一个,这四个值的含意分别为给指定进程的堆、指定进程的模块(通常为DLL)、和当前进程、指定进程的线程拍快照。参数th32ProcessID为进程ID。
  Process32First和Process32Next的原型分别为BOOL WINAPI Process
  32First(HANDLEhSnapshot,LPROCESSENTRY32lpte)和BOOL WINAPI Process32Next( HANDLE hSnapshot, LPROCESSENTRY32 lpte)。这两个API函数的作用分别获得当前进程快照中的第一个和下一个进程。参数hSnapshot为调用CreateToolhelp32Snapshot函数时返回的句柄,参数lpte是结构体PROCESSENTRY32的指针变量。结构体PROCESSENTRY32是用来接收函数Process32First和Process32Next所枚举到的进程的一些信息的。
  (二)进程关闭
  关闭进程先对系统当前运行的进程进行枚举,根据一定的选择条件在函数Process32Next的参数中的结构体PROCESSENTRY32的变量的元素th32ProcessID获得要关闭的进程的ID号。再调用函数OpenProcess(PROCES
  S_TERMINATE,TRUE,m_pIdSelected),该函数返回指定进程ID的进程的句柄。再将得到的进程句柄传递给函数TerminateProcess,关闭指定的进程。
  
  三、枚举和关闭进程程序示例
  
  下面实现一个基于MFC对话框的枚举和关闭进程的应用程序:
  创建工程,首先在主对话框模板中加入一个ID为IDC_LIST1列表视控件并设置它为报告样式。再增加两个分别为刷新和结束进程的按钮,它们的ID分别为:IDC_FRESH和IDC_TERMINATE。
  为列表框控件绑定一个成员CListCtrl类现的成员变量m_processCtrl。在对话框中的初始化函数OnInitDialog中加入如下代码,为列表视控件加入表头:
  m_processCtrl.InsertColumn(0,"进程ID",LVCFMT_LEFT,50);//为列表视加入标题
  m_processCtrl.InsertColumn(1,"进程名",LVCFMT_LEFT,100);
  m_processCtrl.InsertColumn(2,"线程数",LVCFMT_LEFT,50);
  再增加对当前进程进行枚举的代码,核心代码如下:
  HANDLE hSnapShot
  =CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  PROCESSENTRY32* processInfo=new PROCESSENTRY32;
  processInfo->dwSize=sizeof(PROCESSENTRY32);
  int index=0;
  char buff[10];
  while(Process32Next(hSnapShot,processInfo)!=FALSE)
  { //枚举进程并将枚举结果加入到列表视中 m_processCtrl.
  InsertItem(index,itoa(processInfo->th32ProcessID,buff,10));
   m_processCtrl.SetItemText(index,1,processInfo->szExeFile );
   m_processCtrl.SetItemText(index,2,itoa(processInfo->cntThreads,buff,8) );
   index++;
   }
  对于刷新按钮执行和初始化对话框相同的代码。但不能包含前三句,以免每次刷新都为列表视空间加上重复的表头列。
  再为结束进程按钮加上如下代码:
  HANDLE hProcess
  =OpenProcess(PROCESS_TERMINATE,TRUE,m_pIdSelected);
   if(hProcess==NULL)
   {
   MessageBox("读取进程失败!","结束进程");
   OnFresh();
   return;
   }
   if(!TerminateProcess(hProcess,0))
   {
   Return;
   }
   OnFresh();
  其中变量m_pIdSelected;为给主对话框类填加的用来标识当前选中项所对应的进程的ID。它的值是在每次列表视控件的选项变更的时候修改的。所以还应为列表视控件填加如下所示的对消息LVN_ITEMCHANGED的处理代码:
  char buff[10];
  itoa(pNMListView->iItem,buff,10);
  CString pIdSelected=m_processCtrl.GetItemText(pNMListView->iItem,0);
  m_pIdSelected=atoi((const char *)pIdSelected);
  GetDlgItem(IDC_TERMINATE)->EnableWindow(TRUE);
  
  参考文献:
  [1]Jeffrey RichterProgramming Applications for Microsoft Windows,机械工业出版社.
  [2]黄维通,Visual C++面向对象与可视化程序设计,第二版,清华大学出版社.
  [3]孙鑫、余安萍,VC++深入深入详解,第一版,电子工业出版社.
其他文献
[摘要]为保证轧钢系统中的大功率设备能高性能、高效率、高质量地生产,ABB公司推出了在功率、可靠性、开关速度、转换效率、成本等方面都有优异表现的ACS6000变频器作为解决轧钢系统节能环节的一个重要工具。简要介绍ACS6000变频器在轧钢系统中的硬件配置、应用控制和需要注意的问题。  [关键词]ACS6000变频器 轧钢系统 轧钢ABB 中压传动装置  中图分类号:TM7文献标识码:A 文章编号:
期刊
[摘要]提出在高校教学管理系统中应用WAP技术的设想,并且分析该项应用的必要性和可行性,最后给出系统设计的总体思路。  [关键词]WAP 教学管理系统  中图分类号:G43文献标识码:A 文章编号:1671-7597 (2008) 0220071-01  随着我国高等学校办学规模不断扩大,传统教学管理系统已呈现出许多不足。与此同时,许多高校都提出了构建信息化校园的设想,该设想要求高校学生及教职工能
期刊
[摘要]介绍VF程序开发中,如何通过快捷方法实现数据查询结果的输出,即分别输出到打印机和输出到文件的方法和思路。  [关键词]VF 数据查询 打印 文件输出  中图分类号:TP3文献标识码:A 文章编号:1671-7597 (2008) 0220045-01  Visual FoxPro(以下简称为VF)是一款面向对象的数据库应用系统开发工具,特别适合开发中小型信息管理系统。VF在教育、机关、企事
期刊
[摘要]市民素质决定着一座城市的现实发展水平,同时也决定着城市的未来追求和发展走向,决定着城市形象的创新。承德是一座旅游城市,城市形象的塑造与市民整体素质的关系极为重大。  [关键词]公民整体素质 旅游城市形象  中图分类号:F592文献标识码:A 文章编号:1671-7597 (2008) 0220108-01  作为国际著名旅游城市,承德有着许多的“世界之最”世界最大的皇家狩猎场木兰围场、世界
期刊
[摘要]VLAN(Virtual Local AreaNetwork)即虚拟局域网,是一种通过将局域网内的设备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组;EPON(Ethernet Passive Optical Network )即以太网无源光网络,它具有节省光纤资源、对网络协议透明的的特点,在光接入网中扮演着越来越重要的角色。介绍城市社区间宽带网络应提供的基本功能,接入技术及设计原则
期刊
[摘要]从实践的角度出发论述PXE远程启动技术和GHOST软件相结合在机房恢复系统中的应用,并详细介绍基于PXE技术的网络克隆操作。  [关键词]网络克隆 PXE GHOST TFTPD32 ModiIP  中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)0920048-02    计算机实验教学在高校人才培养中起着重要的作用, 只有保证计算机系统的完好, 才能谈得上实
期刊
[摘要]从ARP的工作过程开始,分析ARP欺骗的实现原理,提出局域网中有效防范ARP欺骗的整体解决方案。  [关键词]ARP欺骗 局域网 防范 IP地址 MAC地址  中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)0920051-01    一、引言    当前,很多局域网面临着基于ARP欺骗的病毒困扰,这些病毒发作时不仅造成网络经常掉线的现象,还使用户在浏览网页时经
期刊
[摘要]根据B/S模式下Web系统客户端数据实时更新的要求,提出优化数据更新效率与实时性的解决办法。并对采用XMLHTTP技术实现无刷新数据更新,以及基于SOCKET技术的数据实时更新两种方案做出实施说明和技术分析。  [关键词]实时数据更新 XMLHTTP SOCKET   中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)0920047-01    一、前言    随
期刊
[摘要]在分析了电压空间矢量调制原理的基础上,建立了三相异步电动机在旋转坐标系下的数学模型。并利用Matlab软件对电机的SVPWM交流调速系统进行了仿真,并分析了仿真结果。  [关键词]SVPWM 变频调速 矢量控制 异步电动机  中图分类号:TN7 文献标识码:A 文章编号:1671-7597(2008)0920022-01    在交流电机变频调速中PWM 控制已经得到了日益广泛的应用,其中
期刊
[摘要]针对Network-6000系统在135MW机组DEH控制系统中的首次应用业绩,提出了DEH和DCS控制系统一体化的观点,并实际分析了DEH系统在机组启动和运行中的特性和功能,是解决发电厂控制方式集成化的一个可选方案。  [关键词]DEH DCS 控制系统 硬件和软件一体化 OPC保护 自动准同期  中图分类号:C94 文献标识码:A 文章编号:1671-7597(2008)0920027
期刊