《Windows进程管理工具设计与实现(共21页).doc》由会员分享,可在线阅读,更多相关《Windows进程管理工具设计与实现(共21页).doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上Windows进程管理工具设计与实现摘 要Windows是操作系统中使用最广泛,使用人数最多的系统,它自身带有一个任务管理器,可以对系统中的进程,任务进行管理,本课题主要模仿Windows的任务管理器,对系统中的程序、进程进行控制。在程序的设计过程中,需要通过VC+调用一些Windows API函数,从而获得程序、进程、线程模块,以及系统信息资源。最后在Windows XP系统上进行测试,通过开发,最终程序实现了进程管理的基本功能,能够正确实现对系统当前进程和系统资源的控制。关键词:管理器;线程;进程;VC+专心-专注-专业The Design and Impleme
2、ntation of the Processes Management Tool for WindowsAbstractWindows is the most widely used in the operating system, system, by the largest number of its own with a task manager, is able to process in the system, manage tasks, this topic mainly imitate the Windows task manager, the system of procedu
3、res and process control.In the process of program design, need some Windows API function called by vc + +, thereby gaining procedure, process, thread module, and system information resources.Finally tested on Windows XP system, through the development, finally application implements the basic functi
4、on of process management, correctly implement control of the system to the current process and system resources.Key words: Task Manager; Threads; Process; VC+目 录1 绪论1.1 研究背景Windows任务管理器是用来管理windows系统当前正在运行程序的具体情况的,通过该管理器,可以轻松管理系统中的运行程序。本设计的主要目的就是为了能够很好的运行VC+的所学知识(包括以前所学的一些关于计算机操作系统、进程、计算机安全、编程等知识)进行
5、实践的能力,本课题就是模拟制作一个Windows任务管理器,使其能够成功的对任务、进程进行查看、结束等操作。1.2 研究意义与目的本课题主要研究如何开发一个windows进程管理器,系统应该具有的功能应该满足一般进程管理的需要,最大限度的模仿Windows任务管理器。本课题对进程管理进行详细的设计,分别能够实现管理正在运行的程序,正在运行的进程和线程,还可以对系统信息进行查看。正在运行的程序,主要包括:结束任务、新建任务、切换到新程序以及刷新程序列表。正在运行程序包括:进程列表查看,结束进程、删除文件、导出列表以及刷新进程,另外还可以查看某一个进程的信息,进程包含哪些线程。系统信息查看包括:系
6、统信息,物理内存,虚拟内存,页文件以及cup和内存的使用率表示图。用过电脑的人大都使用过任务管理器之类的软件,它们都能够对进程进行管理。本设计的主要目的就是为了能够很好的运行VC+的所学知识(包括以前所学的一些关于计算机操作系统、进程、计算机安全、编程等知识)进行实践的能力;既能够锻炼自身的实际动手能力,还可以把课题当做项目一样进行开发,了解一下项目的开发流程与经历,这对于以后工作能力的培养更是具有相当重要的意义。1.3 课题的研究方法研究方法上,笔者查阅了近十年来与进程管理相关的资料,并且仔细研读了操作系统和Visual C+ 6.0的相关书籍,进行仔细琢磨、推敲、分析并且加以总结,最终为本
7、论文提供了科学的理论基础。接着向指导老师不断询问、沟通和访谈,在论文构思和结构上面进行详细交流。1.4 相关知识介绍1.4.1进程与线程(1)进程进程是应用程序在计算机上的一次执行活动,他是一个正在运行的程序的实例,由操作系统用来管理进程的内核对象和地址空间组成。内核对象是系统用来存放进程统计信息的地方。而地址空间则包含了所有的可执行模块或动态链接库(DLL)模块的代码和数据。同时,他还可以把内存空间进行动态分配。比如说:线程分配空间。进程的执行过程是动态的,它对着程序的运行,动态地被创建,然后被调度执行,最后会消亡。它是计算机中资源分配的基本单位,同时也是占用处理器的调度单位,一个进程拥有完
8、整的虚拟地址空间。了解进程,不得不说的就是进程的生命周期,进程的生命周期至少包含三种基本状态,分别是:执行、等待与就绪。其中,三种状态能够相互转换,他的基本原理是,位于就绪状态的进程已经获得了处理器以外的其它系统资源,所以只需要得到处理器的调度,就能马上转变为执行状态。位于执行状态的进程由于时间片到期而放弃处理器转换到了就绪状态,因为要等待某个事件发生而放弃处理器则转换为等待状态。位于等待状态的进程由于等待的事件发生从而被唤醒,则转换为就绪状态,如图1。图1 进程状态转换(2)线程了解完进程,就下来就了解一下线程,所谓线程就是进程中的基本调度单位,线程不仅可以由操作系统内核控制,同时还可以由用
9、户的应用程序进行控制。和进程一样,线程也具有三种基本状态:执行、就绪和阻塞。在这三种基本状态下,有五种基本操作对线程的状态进行转换。这五种基本分别操作是:1、派生:线程是在进程内派生出来的,它能用由进程进行派生,也可由线程进行派生。2、阻塞:如果线程在执行的过程中需要等待一个特定的事件发生,则他会被阻塞。3、激活:如果阻塞线程的事件终于发生了,则该线程就会被激活并且进入就绪队列。4、调度:选择一个就绪线程进入执行状态。5、结束:一个线程执行结束,它的寄存器上下文以及堆栈内容等将会被统统释放掉。(3)进程与线程的关系进程是应用程序在计算机上的一次执行活动,他是一个正在运行的程序的实例。如果系统要
10、让一个进程完成某项操作,那么进程就会拥有一个在其自身环境中运行的线程,这个线程负责执行包含在进程地址空间中的代码。当操作系统创建一个进程后,系统会自动为其创建第一个线程,这就是主线程。接着,该线程还能够继续创建其他的线程,以此类推,就能过创建更多的线程。所以对于操作系统的设计,能够归结为三种:(1)以多进程形式,允许多个任务同时运行;(2)以多线程形式,允许单个任务分成不同的部分运行;(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。1.4.2Visual C+介绍Mircrosoft Visual C+ 6.0(通常简称VC+ 6.0),属于微
11、软可视化编程套件 Visual Studio 98中的重要组成部分。这套功能强大的Windows应用程序开发系统是由Microsoft C/C+演化而来的。从Microsoft C/C+ 8.0开始改称为Visual C+,以至发展到今天的Visual C+ 6.0。由于VC是微软的产品,Visual平台是当前Windows应用开发系统中与Windows平台本身支持最彻底的开发平台。Visual C+6.0包含了支持Windows 95.Windows NT 4.0以及Windows 98的Win32 SDK文档,即人们可以在Visual C+环境下使用Windows SDK的SDK文档提供的
12、API来进行Windows应用程序的开发。Visual C+ 6.0采用的是32位编程方式,也就是说其生成的程序是在像Windows 95 Windows NT4.0和Windows 98等这样的32位操作系统下运行的。VC+ 6.0继承了其以前版本的最主要的技术。它提供了一系列可视化编程的工具,如AppWizard和ClassWizard等。它们使Windows内在的复杂的运行机制,通过微软基础类库MFC,使Windows编程更为简单易学。2 主要功能及设计思路2.1 软件要实现的具体功能课题要求实现的主要功能包括以下三个方面的内容:(1)正在运行的程序,主要包括:结束任务、新建任务、切换到
13、新程序以及刷新程序列表。(2)正在运行程序包括:进程列表查看,结束进程、删除文件、导出列表以及刷新进程,另外还可以查看某一个进程的信息,进程包含哪些线程。(3)系统信息查看包括:系统信息,物理内存,虚拟内存,页文件以及cup和内存的使用率表示图。2.2 软件概要设计在IDE编辑环境中创建一个基于对话框的MFC应用程序,在Task主窗口上添加一个标签控件,并且在上面加入三个页面,分别是:正在运行程序、正在运行进程和系统信息查看。正在运行程序页面显示当前正在运行的任务(可见且有窗口标题),用列表控件进行显示,并能够对任务进行操作,如:结束任务、新建任务、切换到新程序以及刷新程序列表。正在运行进程页
14、面显示当前系统正在运行的进程及相关的模块,线程等,用列表控件进行显示,并且可以实现终止进程、进程列表保存到文件等操作。系统信息查看页面显示物理内存、虚拟内存和页文件等详细使用情况,CPU、内存的使用率,并且让他们以图形的方式显示出来,并用列表控件清楚的显示出系统当前信息。3 软件详细设计制作完的程序如图2。在主界面上面设置了一个标签控件,并创建了正在运行程序、正在运行进程和系统信息查看三个页面,标签控件用于选择并显示各自对应的页面。三个页面分别用于显示当前运行的应用程序、正在运行的进程及进程模块、具体系统信息情况。图2 程序运行主界面3.1 窗体的设计与实现所设计的程序是基于MFC对话框的应用
15、程序。所以先要创建一个基于MFC的应用程序PcsMgr, 并且在主对话框类PcsMgrDlg中添加标签控件用来放置正在运行程序、正在运行进程和系统信息查看这三个页面,如图3。图3 标签控件(1)子对话框的显示子对话框的显示与切换,是通过标签控件完成的。当用户点击标签控件上的每一项时,分别显示对应页面的相关信息。要显示三个子对话框,需要添加三个对话框到工程中,并将Style属性设为Child,Board设为None,取消标题栏。再分别创建三个对话框的类CTask ,CProcess,CChart,并定义了要实现的三个变量:CTask m_Task; /任务CProcess m_Process;
16、/进程CChart m_Chart; /图表并定义一个图像列表变量用于存放标签图标:CImageList m_ImageList;接下来就创建子窗口:m_Task.Create(IDD_TASK,m_Tab.GetActiveWindow();m_Process.Create(IDD_PROCESS,m_Tab.GetActiveWindow();m_Chart.Create(IDD_CHART,m_Tab.GetActiveWindow();(2)把创建好的进程管理器程序的权限提升。提升后才能对各个任务进行管理和控制。具体的方法如下:第一步:使用GetCurrentProcess()函数取得
17、当前进程的句柄;第二步:使用OpenProcessToken()打开当前进程的访问令牌;第三步:使用LookupPrivilegeValue()函数取得想提升的权限的值;第四步:使用AdjustTokenPrivileges()函数给当前进程的访问令牌增加权限。具体添加在在CPcsMgrApp类的InitInstance()函数中。到此为止,程序的权限就已经被提升了。(3)实现菜单关机、注销、重起这些菜单命令都是通过调用Windows 的API函数ExitWindowsEx()完成的。这里不做过多描述。3.2 正在运行的程序功能设计该页面实现了当前系统中所有的运行程序,并且能够对运行程序进行控
18、制,比如结束任务、创建新任务、切换到新程序等。(1)显示任务信息正在运行程序是由列表控件进行显示的,如图4。图4 正在运行程序列表要显示任务信息,首先要定义一个结构体类型用于存放任务的相关信息:接着要获取窗口标题,使用API标准函数GetWindowText ():char tempMAX_PATH;GetWindowText(hwnd,temp,sizeof(temp)获取进程及线程ID: TID=GetWindowThreadProcessId(hwnd,&PID);确定运行状态是利用SendMessageTimeout向窗口发送消息而取得:if(SendMessageTimeout(hw
19、nd,WM_SYSCOMMAND,NULL,NULL,SMTO_ABORTIFHUNG,1000,NULL)strRunState = 正在运行;elsestrRunState = 没有响应;(2)结束任务调用SendMessageTimeout()函数向要指定关闭的窗口发送程序关闭的消息,如果程序无响应,就需要调用TerminateProcess()函数进行强行终止。3.3 正在运行的进程功能设计主要实现进程的查看和管理,如结束进程,删除文件,导出列表至网页文件等功能。和显示正在运行程序采用同样的方法,添加两个列表控件,分别显示当前系统中所有的进程以及每一个进程包含的模块信息,如图5。图5
20、正在运行进程列表页面3.3.1 进程、模块及线程信息(1)进程每一个进程都包括各自的信息,这些信息有进程图标,进程名、ID、CPU占有率、内存使用大小、优先级别、线程数、父进程ID和进程路径等信息,如图6。图6 进程信息通过调用ToolHelp API函数能够枚举所有正在运行的进程同时取得进程的路径,在这个功能中,主要用到了ToolHelp API中的函数,分别是:CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);用于创建系统进程快照,通过它能够取得系统中的所有进程的信息。Process32First(hProcessSnap,&pe32);用于获取
21、快照中第一个进程的信息。BOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);用于取得快照中下一个进程信息。进程CPU使用率是通过操作系统提供的性能监视器获得的。部分主要代码如下:pdhStatus = PdhCollectQueryData(m_hQuery);/收集数据pdhStatus = PdhGetFormattedCounterValue(hCounter,PDH_FMT_LONG,&dwctrType,&fmtValue);/得到格式化数据,fmtValue就是需要得到的CPU使用率数据。进程的内存占用
22、率需要用到GetProcessMemoryInfo()函数:GETPROCESSMEMORYINFO GetProcessMemoryInfo;,再取得内存使用数:dwMemoryUse = pmc.WorkingSetSize;/内存使用大小pmc则是返回进程的内存使用信息,它是定义的一个PROCESS_MEMORY_COUNTERS结构。(2)模块和线程模块信息还是需要通过ToolHelp API函数实现。用到的有:CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwPID )这个和显示进程信息中作用一样。Module32First(hModuleSn
23、ap,&me32);用于获取特定进程的第一个模块信息。Module32Next(hModuleSnap,&me32)用于获取指定进程的下一个模块信息。线程信息包括线程ID和线程优先级,也是通过ToolHelp API函数取得。具体不做多余描述3.3.2 结束进程子模块的设计进程除了正常的退出方式外,有时候还需要通过进程管理器进行强制退出。强制退出可以使用ExitProcess()函数,该函数可以在进程中的某个线程中使用,并且能够立即终止本进程的运行。ExitProcess()函数只能强制执行自身进程的退出,如果要在一个进程中强制结束其他进程,就要使用TerminateProcess()函数来实
24、现。使用TerminateProcess()后,被终止的进程无法得到任何关于程序退出的通知。因此,只有在其他方法无法迫使进程结束时才考虑使用TerminateProcess()函数。3.3.3 删除文件子模块的设计对于病毒或木马程序,不仅需要把它们的进程结束了,还需要将其所对应的文件统统删除,让他无法再次运行。改功能需要用OpenProcess()函数将进程打开,用FindFirstFile()函数找到文件,然后用TerminateProcess()函数结束该进程,最后删除该进程对应的文件。3.4 系统信息查看功能设计系统信息查看页面主要显示CPU的使用率以及内存的使用率,并且以图形的方式展示
25、出来,以及显示系统的当前信息,如系统名、计算机名等。3.4.1 画刷绘制CPU和内存使用率为了计算系统中CPU的使用率,需要使用下面的公式:CurrentValue = NewValue OldValue;CurrentCpuIdle = IdleTime / SystemTime;CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors。其中CurrentValue指的是处理器数量值;CurrentCpuIdle指的是CPU的空闲时间;CurrentCpuUsage%指的是CPU的使用率。得到这些值后,使用VC+
26、的画刷将其绘制出来,如图7。图7 CPU使用率绘制图形也是通过位图绘制函数进行绘制,方法和绘制CPU使用率图一样。内存使用率图如图8。图8 内存使用率3.4.2 其他信息显示物理内存、虚拟内存和页文件的使用情况都是通过GlobalMemoryStatus()函数得到的。3.4.3 系统信息显示系统信息包括当前操作系统名、用户名、计算机名等。通过GetVersionEx()函数就可以操作系统名。调用GetUserName()函数能搞得到计算机名。获取计算机名还有其他的方式,就是通过GetComputerName()函数。UserName = Temp;/用户名GetComputerName(lp
27、szSystemInfo,&cchBuff);/计算机名4 软件测试4.1 测试环境配置系统配置:Windows XP;硬件配置:CPU:AMD Athlon(tm)xp 2500+ 1.8GHz以上 内存:512M以上 硬盘:SATA 80G以上4.2 对比测试将程序取得的任务、进程以及资源使用情况获取到的信息与Windows任务管理器中的信息进行对比,验证程序的正确性。4.3 结果验证程序能够在Windows XP系统上能正常运行。正在运行的程序能够进行结束任务、新建任务、切换到新程序以及刷新程序列表。正在运行程序能够进行进程列表查看,结束进程、删除文件、导出列表以及刷新进程,另外还可以查
28、看某一个进程的信息,进程包含哪些线程。系统信息查看能够查看系统信息,物理内存,虚拟内存,页文件以及cup和内存的使用率表示图。将获取的进程信息与Windows任务管理器中的信息进行对比,结果一致,如图9,10。图9 程序获取的进程信息图10 Windows任务管理器进程信息系统资源使用情况与Window任务管理器取得的信息进行比较,如图11,结果一致。图11 资源使用情况结 论通过本课题的研究和制作,在VC+的IDE环境中进行编程,只知道理论知识是远远不够的,还需要对IDE进行不断熟悉,另外系统提供给我们接口函数,需要通过MSDN帮助进行详细了解和熟悉,才能够正确的使用,通过本课题的开发,发现
29、软件开发并不是一件容易的事情,需要逻辑性强,思路明确。另外,注释是很重要的,没有注释,代码是毫无价值的。Windows进程管理工具能够显示正在运行的程序,正在运行进程、系统信息查看功能,可以正常结束程序、结束进程,并能以图像的方式显示CPU、内存使用率,基本完成了最初课题的定位。不过在一些模块和Dll的调用上,还有些不熟练,今后还需要继续努力学习。1 汤子瀛,哲风屏,汤小丹. 计算机操作系统M.西安:西安电子科大出版社,2005。2 (美)Steven Holzner. Visual C+ 6.0轻松进阶M.北京:电子工业出版社,2005。3 (美)Ben Ezzell. Windows环境下
30、VC+编程M.北京:电子工业出版社,2005。4 (美)Jeffrey Richter. Windows核心编程M.北京:机械工业出版社,2005。5 齐舒创作室. Windows2000高级变成技巧M.北京:清华大学出版社,2000。6 (美)John E.Swanke. Visual C+MFC编程实例M.北京:机械工业出版社,2005。7 (美)David J.Kruglinski. VC+技术内幕M.北京:清华大学出版社,2002。8 张海棠. Visual C+ 6.0编程指南M.北京:航空工业出版社,2002。致 谢本研究及学位论文是在我的导师老师的亲切关怀和悉心指导下完成的。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。 老师不仅在进程管理、Windows编程给我以精心指导,同时还在思想、生活上给我以无微不至的关怀,在此谨向指导老师致以诚挚的谢意和崇高的敬意。我还要感谢在一起愉快的度过毕业论文小组的同学们,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们! 最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢!