Windows进程管理工具设计与实现要点_第1页
Windows进程管理工具设计与实现要点_第2页
Windows进程管理工具设计与实现要点_第3页
Windows进程管理工具设计与实现要点_第4页
Windows进程管理工具设计与实现要点_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows进程管理工具设计与实现摘要Windows是操作系统中使用最广泛,使用人数最多的系统,它自身带有一个任务管理器,可以对系统中的进程,任务进行管理,本课题主要模仿Windows的任务管理器,对系统中的程序、进程进行控制。在程序的设计过程中,需要通过VC++调用一些WindowsAPI函数,从而获得程序、进程、线程模块,以及系统信息资源。最后在WindowsXP系统上进行测试,通过开发,最终程序实现了进程管理的基本功能,能够正确实现对系统当前进程和系统资源的控制。关键词:管理器;线程;进程;VC++TheDesignandImplementationoftheProcessesManagementToolforWindowsAbstractWindowsisthemostwidelyusedintheoperatingsystem,system,bythelargestnumberofitsownwithataskmanager,isabletoprocessinthesystem,managetasks,thistopicmainlyimitatetheWindowstaskmanager,thesystemofproceduresandprocesscontrol.Intheprocessofprogramdesign,needsomeWindowsAPIfunctioncalledbyvc++,therebygainingprocedure,process,threadmodule,andsysteminformationresources.FinallytestedonWindowsXPsystem,throughthedevelopment,finallyapplicationimplementsthebasicfunctionofprocessmanagement,correctlyimplementcontrolofthesystemtothecurrentprocessandsystemresources.Keywords:TaskManager;Threads;Process;VC++目录1 绪论 11.1 研究背景 11.2 研究意义与目的 11.3 课题的研究方法 11.4 相关知识介绍 21.4.1进程与线程 21.4.2VisualC++介绍 32 主要功能及设计思路 42.1 软件要实现的具体功能 42.2 软件概要设计 43 软件详细设计 53.1 窗体的设计与实现 53.2 正在运行的程序功能设计 73.3 正在运行的进程功能设计 83.3.1 进程、模块及线程信息 93.3.2 结束进程子模块的设计 113.3.3 删除文件子模块的设计 113.4 系统信息查看功能设计 113.4.1 画刷绘制CPU和内存使用率 113.4.2 其他信息显示 123.4.3 系统信息显示 124 软件测试 134.1 测试环境配置 134.2 对比测试 134.3 结果验证 13结论 16参考文献 17致谢 18PAGE18绪论研究背景Windows任务管理器是用来管理windows系统当前正在运行程序的具体情况的,通过该管理器,可以轻松管理系统中的运行程序。本设计的主要目的就是为了能够很好的运行VC++的所学知识(包括以前所学的一些关于计算机操作系统、进程、计算机安全、编程等知识)进行实践的能力,本课题就是模拟制作一个Windows任务管理器,使其能够成功的对任务、进程进行查看、结束等操作。研究意义与目的本课题主要研究如何开发一个windows进程管理器,系统应该具有的功能应该满足一般进程管理的需要,最大限度的模仿Windows任务管理器。本课题对进程管理进行详细的设计,分别能够实现管理正在运行的程序,正在运行的进程和线程,还可以对系统信息进行查看。正在运行的程序,主要包括:结束任务、新建任务、切换到新程序以及刷新程序列表。正在运行程序包括:进程列表查看,结束进程、删除文件、导出列表以及刷新进程,另外还可以查看某一个进程的信息,进程包含哪些线程。系统信息查看包括:系统信息,物理内存,虚拟内存,页文件以及cup和内存的使用率表示图。用过电脑的人大都使用过任务管理器之类的软件,它们都能够对进程进行管理。本设计的主要目的就是为了能够很好的运行VC++的所学知识(包括以前所学的一些关于计算机操作系统、进程、计算机安全、编程等知识)进行实践的能力;既能够锻炼自身的实际动手能力,还可以把课题当做项目一样进行开发,了解一下项目的开发流程与经历,这对于以后工作能力的培养更是具有相当重要的意义。课题的研究方法研究方法上,笔者查阅了近十年来与进程管理相关的资料,并且仔细研读了操作系统和VisualC++6.0的相关书籍,进行仔细琢磨、推敲、分析并且加以总结,最终为本论文提供了科学的理论基础。接着向指导老师不断询问、沟通和访谈,在论文构思和结构上面进行详细交流。相关知识介绍 1.4.1进程与线程(1)进程进程是应用程序在计算机上的一次执行活动,他是一个正在运行的程序的实例,由操作系统用来管理进程的内核对象和地址空间组成。内核对象是系统用来存放进程统计信息的地方。而地址空间则包含了所有的可执行模块或动态链接库(DLL)模块的代码和数据。同时,他还可以把内存空间进行动态分配。比如说:线程分配空间。进程的执行过程是动态的,它对着程序的运行,动态地被创建,然后被调度执行,最后会消亡。它是计算机中资源分配的基本单位,同时也是占用处理器的调度单位,一个进程拥有完整的虚拟地址空间。了解进程,不得不说的就是进程的生命周期,进程的生命周期至少包含三种基本状态,分别是:执行、等待与就绪。其中,三种状态能够相互转换,他的基本原理是,位于就绪状态的进程已经获得了处理器以外的其它系统资源,所以只需要得到处理器的调度,就能马上转变为执行状态。位于执行状态的进程由于时间片到期而放弃处理器转换到了就绪状态,因为要等待某个事件发生而放弃处理器则转换为等待状态。位于等待状态的进程由于等待的事件发生从而被唤醒,则转换为就绪状态,如图1。图1进程状态转换(2)线程了解完进程,就下来就了解一下线程,所谓线程就是进程中的基本调度单位,线程不仅可以由操作系统内核控制,同时还可以由用户的应用程序进行控制。和进程一样,线程也具有三种基本状态:执行、就绪和阻塞。在这三种基本状态下,有五种基本操作对线程的状态进行转换。这五种基本分别操作是:1、派生:线程是在进程内派生出来的,它能用由进程进行派生,也可由线程进行派生。2、阻塞:如果线程在执行的过程中需要等待一个特定的事件发生,则他会被阻塞。3、激活:如果阻塞线程的事件终于发生了,则该线程就会被激活并且进入就绪队列。4、调度:选择一个就绪线程进入执行状态。5、结束:一个线程执行结束,它的寄存器上下文以及堆栈内容等将会被统统释放掉。(3)进程与线程的关系进程是应用程序在计算机上的一次执行活动,他是一个正在运行的程序的实例。如果系统要让一个进程完成某项操作,那么进程就会拥有一个在其自身环境中运行的线程,这个线程负责执行包含在进程地址空间中的代码。当操作系统创建一个进程后,系统会自动为其创建第一个线程,这就是主线程。接着,该线程还能够继续创建其他的线程,以此类推,就能过创建更多的线程。所以对于操作系统的设计,能够归结为三种:(1)以多进程形式,允许多个任务同时运行;(2)以多线程形式,允许单个任务分成不同的部分运行;(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。 1.4.2VisualC++介绍MircrosoftVisualC++6.0(通常简称VC++6.0),属于微软可视化编程套件VisualStudio98中的重要组成部分。这套功能强大的Windows应用程序开发系统是由MicrosoftC/C++演化而来的。从MicrosoftC/C++8.0开始改称为VisualC++,以至发展到今天的VisualC++6.0。由于VC是微软的产品,Visual平台是当前Windows应用开发系统中与Windows平台本身支持最彻底的开发平台。VisualC++6.0包含了支持Windows95.WindowsNT4.0以及Windows98的Win32SDK文档,即人们可以在VisualC++环境下使用WindowsSDK的SDK文档提供的API来进行Windows应用程序的开发。VisualC++6.0采用的是32位编程方式,也就是说其生成的程序是在像Windows95WindowsNT4.0和Windows98等这样的32位操作系统下运行的。VC++6.0继承了其以前版本的最主要的技术。它提供了一系列可视化编程的工具,如AppWizard和ClassWizard等。它们使Windows内在的复杂的运行机制,通过微软基础类库MFC,使Windows编程更为简单易学。主要功能及设计思路软件要实现的具体功能课题要求实现的主要功能包括以下三个方面的内容:(1)正在运行的程序,主要包括:结束任务、新建任务、切换到新程序以及刷新程序列表。(2)正在运行程序包括:进程列表查看,结束进程、删除文件、导出列表以及刷新进程,另外还可以查看某一个进程的信息,进程包含哪些线程。(3)系统信息查看包括:系统信息,物理内存,虚拟内存,页文件以及cup和内存的使用率表示图。软件概要设计在IDE编辑环境中创建一个基于对话框的MFC应用程序,在Task主窗口上添加一个标签控件,并且在上面加入三个页面,分别是:正在运行程序、正在运行进程和系统信息查看。正在运行程序页面显示当前正在运行的任务(可见且有窗口标题),用列表控件进行显示,并能够对任务进行操作,如:结束任务、新建任务、切换到新程序以及刷新程序列表。正在运行进程页面显示当前系统正在运行的进程及相关的模块,线程等,用列表控件进行显示,并且可以实现终止进程、进程列表保存到文件等操作。系统信息查看页面显示物理内存、虚拟内存和页文件等详细使用情况,CPU、内存的使用率,并且让他们以图形的方式显示出来,并用列表控件清楚的显示出系统当前信息。软件详细设计制作完的程序如图2。在主界面上面设置了一个标签控件,并创建了正在运行程序、正在运行进程和系统信息查看三个页面,标签控件用于选择并显示各自对应的页面。三个页面分别用于显示当前运行的应用程序、正在运行的进程及进程模块、具体系统信息情况。图2程序运行主界面窗体的设计与实现所设计的程序是基于MFC对话框的应用程序。所以先要创建一个基于MFC的应用程序PcsMgr,并且在主对话框类PcsMgrDlg中添加标签控件用来放置正在运行程序、正在运行进程和系统信息查看这三个页面,如图3。图3标签控件(1)子对话框的显示子对话框的显示与切换,是通过标签控件完成的。当用户点击标签控件上的每一项时,分别显示对应页面的相关信息。要显示三个子对话框,需要添加三个对话框到工程中,并将Style属性设为Child,Board设为None,取消标题栏。再分别创建三个对话框的类CTask,CProcess,CChart,并定义了要实现的三个变量:CTaskm_Task;//任务CProcessm_Process;//进程CChartm_Chart;//图表并定义一个图像列表变量用于存放标签图标:CImageListm_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()函数取得当前进程的句柄;第二步:使用OpenProcessToken()打开当前进程的访问令牌;第三步:使用LookupPrivilegeValue()函数取得想提升的权限的值;第四步:使用AdjustTokenPrivileges()函数给当前进程的访问令牌增加权限。具体添加在在CPcsMgrApp类的InitInstance()函数中。到此为止,程序的权限就已经被提升了。(3)实现菜单关机、注销、重起这些菜单命令都是通过调用Windows的API函数ExitWindowsEx()完成的。这里不做过多描述。正在运行的程序功能设计该页面实现了当前系统中所有的运行程序,并且能够对运行程序进行控制,比如结束任务、创建新任务、切换到新程序等。(1)显示任务信息正在运行程序是由列表控件进行显示的,如图4。图4正在运行程序列表要显示任务信息,首先要定义一个结构体类型用于存放任务的相关信息:接着要获取窗口标题,使用API标准函数GetWindowText():chartemp[MAX_PATH];GetWindowText(hwnd,temp,sizeof(temp))获取进程及线程ID:TID=GetWindowThreadProcessId(hwnd,&PID);确定运行状态是利用SendMessageTimeout向窗口发送消息而取得:if(SendMessageTimeout(hwnd,WM_SYSCOMMAND,NULL,NULL,SMTO_ABORTIFHUNG,1000,NULL)) strRunState="正在运行";else strRunState="没有响应";(2)结束任务调用SendMessageTimeout()函数向要指定关闭的窗口发送程序关闭的消息,如果程序无响应,就需要调用TerminateProcess()函数进行强行终止。正在运行的进程功能设计主要实现进程的查看和管理,如结束进程,删除文件,导出列表至网页文件等功能。和显示正在运行程序采用同样的方法,添加两个列表控件,分别显示当前系统中所有的进程以及每一个进程包含的模块信息,如图5。图5正在运行进程列表页面进程、模块及线程信息(1)进程每一个进程都包括各自的信息,这些信息有进程图标,进程名、ID、CPU占有率、内存使用大小、优先级别、线程数、父进程ID和进程路径等信息,如图6。图6进程信息通过调用ToolHelpAPI函数能够枚举所有正在运行的进程同时取得进程的路径,在这个功能中,主要用到了ToolHelpAPI中的函数,分别是:CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);用于创建系统进程快照,通过它能够取得系统中的所有进程的信息。Process32First(hProcessSnap,&pe32);用于获取快照中第一个进程的信息。BOOLWINAPIProcess32Next(HANDLEhSnapshot,LPPROCESSENTRY32lppe);用于取得快照中下一个进程信息。进程CPU使用率是通过操作系统提供的性能监视器获得的。部分主要代码如下:pdhStatus=PdhCollectQueryData(m_hQuery);//收集数据pdhStatus=PdhGetFormattedCounterValue(hCounter,PDH_FMT_LONG,&dwctrType,&fmtValue);//得到格式化数据,fmtValue就是需要得到的CPU使用率数据。进程的内存占用率需要用到GetProcessMemoryInfo()函数:GETPROCESSMEMORYINFOGetProcessMemoryInfo;,再取得内存使用数:dwMemoryUse=pmc.WorkingSetSize;//内存使用大小pmc则是返回进程的内存使用信息,它是定义的一个PROCESS_MEMORY_COUNTERS结构。(2)模块和线程模块信息还是需要通过ToolHelpAPI函数实现。用到的有:CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwPID)这个和显示进程信息中作用一样。Module32First(hModuleSnap,&me32);用于获取特定进程的第一个模块信息。Module32Next(hModuleSnap,&me32)用于获取指定进程的下一个模块信息。线程信息包括线程ID和线程优先级,也是通过ToolHelpAPI函数取得。具体不做多余描述结束进程子模块的设计进程除了正常的退出方式外,有时候还需要通过进程管理器进行强制退出。强制退出可以使用ExitProcess()函数,该函数可以在进程中的某个线程中使用,并且能够立即终止本进程的运行。ExitProcess()函数只能强制执行自身进程的退出,如果要在一个进程中强制结束其他进程,就要使用TerminateProcess()函数来实现。使用TerminateProcess()后,被终止的进程无法得到任何关于程序退出的通知。因此,只有在其他方法无法迫使进程结束时才考虑使用TerminateProcess()函数。删除文件子模块的设计对于病毒或木马程序,不仅需要把它们的进程结束了,还需要将其所对应的文件统统删除,让他无法再次运行。改功能需要用OpenProcess()函数将进程打开,用FindFirstFile()函数找到文件,然后用TerminateProcess()函数结束该进程,最后删除该进程对应的文件。系统信息查看功能设计系统信息查看页面主要显示CPU的使用率以及内存的使用率,并且以图形的方式展示出来,以及显示系统的当前信息,如系统名、计算机名等。画刷绘制CPU和内存使用率为了计算系统中CPU的使用率,需要使用下面的公式:CurrentValue=NewValue–OldValue;CurrentCpuIdle=IdleTime/SystemTime;CurrentCpuUsage%=100-(CurrentCpuIdle*100)/NumberOfProcessors。其中CurrentValue指的是处理器数量值;CurrentCpuIdle指的是CPU的空闲时间;CurrentCpuUsage%指的是CPU的使用率。得到这些值后,使用VC++的画刷将其绘制出来,如图7。图7CPU使用率绘制图形也是通过位图绘制函数进行绘制,方法和绘制CPU使用率图一样。内存使用率图如图8。图8内存使用率其他信息显示物理内存、虚拟内存和页文件的使用情况都是通过GlobalMemoryStatus()函数得到的。系统信息显示系统信息包括当前操作系统名、用户名、计算机名等。通过GetVersionEx()函数就可以操作系统名。调用GetUserName()函数能搞得到计算机名。获取计算机名还有其他的方式,就是通过GetComputerName()函数。UserName=Temp;//用户名GetComputerName(lpszSystemInfo,&cchBuff);//计算机名软件测试测试环境配置系统配置:WindowsXP;硬件配置:CPU:AMDAthlon(tm)xp2500+1.8GHz以上 内存:512M以上 硬盘:SATA80G以上对比测试将程序取得的任务、进程以及资源使用情况获取到的信息与Windows任务管理器中的信息进行对比,验证程序的正确性。结果验证程序能够在WindowsXP系统上能正常运行。正在运行的程序能够进行结束任务、新建任务、切换到新程序以及刷新程序列表。正在运行程序能够进行进程列表查看,结束进程、删除文件、导出列表以及刷新进程,另外还可以查看某一个进程的信息,进程包含哪些线程。系统信息查看能够查看系统信息,物理内存,虚拟内存,页文件以及cup和内存的使用率表示图。将获取的进程信息与Windows任务管理器中的信息进行对比,结果一致,如图9,10。图9程序获取的进程信息图10Windows任务管理器进程信息系统资源使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论