自制进程管理器

系统中运行的进程实际上比我们在任务管理器("Ctrl+Alt+Del"对话框)中看到的要多,有些恶意的程序是无法在任务栏和任务管理器中看到的。本文介绍如何显示系统当前运行的所有进程,及如何终止运行的进程。

运行程序,点按钮"获取进程",则系统当前运行的所有进程名称以及进程对应的ID、涉及的线程数、优先级便显示在列表视图里面了。图一是程序运行效果图。

图一 运行效果图

1.基本原理

系统中有个进程链表,用来保存当前运行的所有进程的信息,程序首先调用函数CreateToolhelp32Snapshot获得进程链表的句柄,然后调用函数ProcessFirst和ProcessNext获得进程结构PROCESSENTRY32,进程的信息都包括在其中。终止一个进程,首先调用OpenProcess函数获得指定函数的句柄,然后调用函数TerminateProcess使指定进程结束。

2.几个API函数说明:

(1)HANDLE WINAPI CreateToolhelp32Snapshot(
                    DWORD dwFlags,DWORD th32ProcessID);

   功能:获得某一时刻系统中由dwFlags标识的进程、堆(heap)、模块(module)或线程的快照信息。
   参数说明:
   dwFlags:指明返回的是哪一种快照的句柄。
   Th32ProcessID:当取TH32CS_SNAPHEAPLIST和TH32CS_SNAPMODULE时才有用。
(2)HANDLE OpenProcess(DWORD dwDesiredAccess,
                   BOOL bInheritHandle,
                   DWORD dwProcessId);

   功能:返回指定进程的句柄。

   参数说明:
   dwDesiredAccess:指定对指定进程的操作。
   bInheritHandle:指明返回的句柄是否能被继承。
   dwProcessId:指定要打开的进程的ID。
(3)BOOL WINAPI Process32First(HANDLE hSnapshot,
                       LPPROCESSENTRY32 lppe);
   功能:获得系统进程链表中第一个进程的信息。
   参数说明:
   hSnapshot:调用获得的CreateToolhelp32Snapshot快照句柄。
   lppe:指向PROCESSENTRY32进程结构,该结构保存有该进程的相关信息。
(4)BOOL WINAPI Process32Next(HANDLE hSnapshot,
                 LPPROCESSENTRY32 lppe);
   功能:获得系统进程链表中下一个进程的信息。

3.开发步骤

(1)使用AppWizard生成一个基于对话框的MFC应用程序。

(2)编辑主对话框,添加按钮"获取进程"和"终止进程",添加List Control控件,按钮和 List Control 控件的设置见附带源代码。

(3)向类CshowAllProcessDlg中添加成员变量:

DWORD m_ProcessIndex[50];//存放所有进程的ID

(4)分别为按钮"获取进程"和"终止进程"添加消息处理函数OnGetProcess()和OnStopProcess()。对话框的初始化以及消息响应的实现请参见附带源代码。

4.注意

(1)本文中的涉及的几个API函数声明包含在头文件"TLHELP32.H"中,所以必须在ShowAllprocessDlg.cpp中加入:

#include "TLHELP32.H" 

(2)有的进程是系统不允许终止的,所以进程是否正常终止要加系统对话框判断。

(3)在调用Process32First和Process32Next前,必须将PROCESSENTRY32参数的成员变量dwSize设置为PROCESSENTRY32结构的大小。

本文配套源码

时间: 2024-09-14 21:14:15

自制进程管理器的相关文章

金山毒霸如何使用进程管理器

  金山毒霸的进程管理器,是利用了"互联网可信认证"技术的进程管理器,能够实时标注出系统中存在的木马.病毒.恶意软件等可疑与威胁进程,同时加入了详尽的进程描述信息,帮助快速定位威胁源.管理进程. 在"安全百宝箱"主界面点击"进程管理器"按钮,在左侧的面板中显示了计算机系统中正在运行的所有进程,右侧面板对应了这些进程的相关信息,包括名称,路径等. 单击"找出风险进程",会进行快速风险进程定位,对于确实有风险的进程,可以选中它并点

WinXP下如何删除进程管理器中的GoogleUpdate进程

  使用WinXP系统的朋友经常都会用到进程管理器,进程管理器可以帮你监控到每一个悄悄在后台运行的程序.有不少细心的WinXP用户会发现,进程管理器中总是出现GoogleUpdate.exe进程,看名字我们就知道用户一定是安装了Google相关程序,虽然可以将该进程强行终止,不过每次开机后又会出现,而且无论你怎么查找启动项,禁止Google Update Service它都一直会出现,这确实是一个棘手的问题,难道真没有解决方法了吗?为了解决这个问题我们还应当了解它的运行方式. 既然GoogleU

Win7系统巧用Windows进程管理器

  Windows进程管理器是一款功能比较强大的进程管理工具,可以进程查询.进程管理,包括结束进程.暂停进程.恢复进程.删除进程等,还可以进行端口访问查询.查看系统性能信息等. 1.进程管理 在win7系统中运行该软件,主界面将所有功能分为了进程管理.端口监听.系统信息三大部分:软件对进程的管理和允许用户对进程的操作等非常全面.对于每一个进程,用户除了可以查看其详细进程信息外,用户还可以随时结束指定进程和删除指定进程. 在对进程操作方面,该软件非常有特色:首先是"暂停进程"功能,这一功

[原创]一个简单的windows HOOK - 隐藏进程管理器中特定的进程

一个简单的windows HOOK - 隐藏进程管理器中特定的进程  (适用平台:windows 2000 sp4,windows XP sp2)           屏蔽任务管理器中的进程名称有很多种方法,可以在ring0级做文章: 修改内核进程链表,拦截内核API等.我这里只给出win32下的实现,原 理是最普通的 windows 钩子机制.实现语言 win32 汇编 (masm32):   0 在DllEntry中处理资源取得和产生"工作"线程: mov eax,_hinstan

LNMP的并发考虑、资源分配(php-fpm进程管理器的核心配置)

下面总结在最近招聘中常问的一个问题 PHPer当被问到你的程序性能如何?程序的并发可以达到多少?程序的瓶颈在哪儿?为了满足业务需求应该购买多少台服务器?负载均衡中php应用服务器需要多少台? 可能这些问题在面试中会设置一个应用的场景及一些前提条件,让面试的人去设计,并提出看法建议,能够回答得很好的人还是比较少的. 今天我们来谈谈LNMP的并发考虑和资源分配.首先弄清楚几个概念 LNMP中的N是nginx充当Web Server 内容的分发者,会在文件系统找到相应的文件,就返回给浏览器,如:ngi

怎样打开进程管理器?

  方法一; 组合键"ctrl+alt+delete" 方法二: 组合键"ctrl+shift+esc" 方法三: 在任务栏上面点右键--任务栏管理器

node.js应用后台守护进程管理器Forever安装和使用实例_node.js

我们不可能直接通过node命令来管理远程站点,这样无法保证网站的可持续运行.我们用Forever来解决这个问题,它可以将NodeJS应用以后台守护进程的方式运行,我们还可以将NodeJS应用设成随系统启动而自动运行. 首先,安装Forever: 复制代码 代码如下: npm install forever -gd 这样Forever就安装好了,我们可以直接运行Forever命令: 复制代码 代码如下: forever --helpforever start app.jsforever stop

浅谈 Node.js 和 PHP 进程管理

所周知,PHP 占据了服务端编程语言的半壁江山,正如汪峰在音乐圈的地位一般.随着 Node.js 逐渐走上服务端编程的舞台,关于 PHP 和 Node.js 孰优孰劣的争论也不曾间断. 垄断性的市场份额足以佐证 PHP 的优秀.并且 HHVM 虚拟机.PHP 7 的革新,也给 PHP 带来了跨越式的性能突破.然而,当我们为语言层面的性能差异喋喋不休时,却往往忽略了 Web 模型在性能表现中的权重. 从 CGI 到 FastCGI 早期的 Web 服务,是基于传统的 CGI 协议实现的.每个发送到

[原创]如何侵入WinNT系统的对话管理器进程(smss.exe)

如何侵入WinNT系统的对话管理器进程(smss.exe)         我们知道在NT中smss.exe是唯一一个被内核信任的ring3级进程,其中只 包括一个原生态dll---ntdll.dll.我用常用的hook和远线程的方式都无法侵入其 "领空",如果哪位朋友有在ring3级入侵smss的方法请不吝赐教.         我的方法是在ring0切入其进程,然后调用未公开的原生态api LdrLoadDll, 然后做一个ring0 Trace Hook,从而达到目的,以下是成功