毕业设计论文简述WINDOWS进程管理工具的原理和实现.doc

上传人:sccc 文档编号:4863376 上传时间:2023-05-20 格式:DOC 页数:25 大小:505.52KB
返回 下载 相关 举报
毕业设计论文简述WINDOWS进程管理工具的原理和实现.doc_第1页
第1页 / 共25页
毕业设计论文简述WINDOWS进程管理工具的原理和实现.doc_第2页
第2页 / 共25页
毕业设计论文简述WINDOWS进程管理工具的原理和实现.doc_第3页
第3页 / 共25页
毕业设计论文简述WINDOWS进程管理工具的原理和实现.doc_第4页
第4页 / 共25页
毕业设计论文简述WINDOWS进程管理工具的原理和实现.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《毕业设计论文简述WINDOWS进程管理工具的原理和实现.doc》由会员分享,可在线阅读,更多相关《毕业设计论文简述WINDOWS进程管理工具的原理和实现.doc(25页珍藏版)》请在三一办公上搜索。

1、 591论文网 www.591LW.com简述WINDOWS进程管理工具的原理和实现摘 要Windows自带的任务管理器存在功能上的缺陷,比如不能查看进程的模块及线程信息。课题设计就是模拟Windows任务管理器,开发一个功能更完善的Windows进程管理软件。主要设计的是一个基于对话框的VC+程序,在主对话框上面放置了一个标签控件,并创建了任务、进程和系统信息三个页面,标签控件用于选择并显示页面。三个页面分别用于显示当前运行的窗口程序、进程及进程模块、系统资源使用情况。程序还实现了结束任务、切换任务、终止进程等对进程管理的基本功能。在程序的设计过程中,通过调用Windows API函数而获得

2、任务、进程、线程模块,以及系统资源使用情况等信息。最后在Windows XP系统上进行测试,实现了进程管理的基本功能,为用户了解当前进程及系统资源使用情况提供了很好的参考。关键词:任务管理器;线程;进程;APIThe Design and Implementation of the Processes Management Tool for WindowsAbstractThere are some defects in the Task Manager built-in Windows. For example, it doesnt show us the information of pr

3、ocess modules and threads. The work of my design is to follow the Windows Task Manager and develop the software which has improved function for managing process. This software is designed to be a program based on a dialog write in the VC+. There is a label control in the main dialog box, and there a

4、re three pages for task, process and system information. The label control is used to select the page and to show it. The three pages are used respectively to display the information of task runs at current, process and process modules, the utilization of system resources. This software also realize

5、d some basic function for managing process, such as ending the task, switching the task, terminating the process and so on. During the process of my program, the information for tasks, process, thread modules and the utilization of system resource is got by calling the Windows API functions. Finally

6、 I test it on the Windows XP system. And it achieves the basic function for managing process. It provides a good reference for users to view the process at current and the utilization of system resources.Key words: Task Manager; Threads; Process; API目 录论文总页数:25页1引言11.1课题背景11.2国内外研究现状11.3课题研究的意义11.4课

7、题的研究方法11.5进程与线程简介11.5.1进程简介11.5.2线程简介31.5.3进程与线程的关系31.5.4Windows自带的任务管理器分析42主要功能及设计思路42.1主要功能42.2设计思路53详细设计53.1主框架的实现53.1.1子对话框的显示63.1.2实现菜单73.1.3提升程序权限83.2任务列表页面设计83.2.1显示任务信息83.2.2结束任务93.2.3切换任务103.3进程列表页面设计103.3.1显示进程信息113.3.2显示模块及线程信息133.3.3结束进程153.3.4删除文件163.3.5保存进程信息到文件173.4系统性能页面设计173.4.1绘制CP

8、U使用率图173.4.2绘制内存使用率图193.4.3其他性能显示193.4.4系统信息显示204测试结果214.1测试环境214.2测试方法214.3测试结果21结 论23参考文献231 引言1.1 课题背景随着计算机的广泛应用,很多的软件被安装在计算机上,使计算机运行的程序进程越来越多;很多的程序在运行时常出现异常(如不能正常结束、占用大量资源、发现异常的进程等)。这些现象给我们的计算机使用及管理带来很多的不便。为了给计算机上运行的程序进行很好的管理,现在出现了许多的进程管理工具软件。课题设计的目的主要是为了检查综合运用以前所学知识(包括以前所学的一些关于计算机操作系统、进程、计算机安全、

9、编程等知识)的能力,模拟Windows任务管理器,开发一个功能更完善的Windows进程管理软件,对任务、进程进行查看、结束等操作。1.2 国内外研究现状从现状看来,Windows进程管理工具及其理论的研究,无论是国外还是国内,技术都相当成熟。微软Windows操作系统系列(98和ME除外)都自带有进程管理器,但功能不是很完善,不能查看进程模块及线程信息,而许多其他版本的Windows进程管理软件都具有完善的功能。1.3 课题研究的意义随着计算机技术的迅猛发展,计算机的运用给人们带来了很多便利,无论是学习,办公,还是商务。一款好的系统管理软件能大大地提高计算机的使用和管理效率,进程管理器就能很

10、好地对系统上运行的进程进行管理。很多人都使用过进程管理器之类的软件,或者是Windows自带的任务管理器,它们都能够对进程进行管理。课题设计选择开发一个进程管理器软件,能够使自己综合运用以前所学知识(包括操作系统、编程、系统安全等知识)的能力,同时也使自己了解当今软件编程的一些新技术;既锻炼了自己的实际动手能力,又引导自己进行了一次模拟实际产品的开发,对于自己以后工作能力的培养具有重要的意义。1.4 课题的研究方法系统使用VC+ 6.0的开发环境,模拟Windows的任务管理器进行设计与开发。因此,课题设计应首先分析进程管理器软件的相关功能;其次,综合运用以前所学的相关知识,广泛查阅资料(尤其

11、是进程、线程及其相关知识),选择所熟悉的开发工具进行开发;同时,在开发设计与实现中,要保存好相关的设计文挡。1.5 进程与线程简介1.5.1 进程简介进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。另一个是地址空间,它包含所有可执行模块或DLL模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间。进程是一个动态的执行过程,它动态地被创建,并被调度执行后消亡。进程是资源分配的基本单位,也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。系统中需要有描述进程存在和能够反应其变化的

12、物理实体,即进程的静态描述。进程的静态描述由三部份组成:进程控件块PCB,有关程序段和该程序段对其进行操作的数据结构集。进程控制块包含了有关进程的描述信息、控制信息以及资源信息,是进程动态特征的集中反应。系统根据PCB感知进程的存在和通过PCB中所包含的各项变量的变化,掌握进程所处的状态以及达到控制进程活动的目的。由于进程的PCB是系统感知进程的唯一实体,因此,在几乎所有的多道操作系统中,一个进程的PCB结构都是全部或部分常驻内存的。进程的程序部分描述进程所要完成的功能。而数据结构集是程序在执行时必不可少的工作区和操作对象。这两部分是进程完成所需功能的物质基础。由于进程的这两部分内容与控制进程

13、的执行及完成进程功能直接有关,因而,在大部分多道操作系统中,这两部分内容存放在外存中,直到该进程执行时再调入内存。一个进程的生命周期可以划分为一组状态,这些状态描述了整个进程。系统根据PCB结构中的状态值控制进程。在进程的整个生命周期内,一个进程至少具有三种基本状态,它们是:执行状态、等待状态和就绪状态。这三种状态之间可以相互换,处于就绪状态的进程已经得到除CPU之外的其它资源,只要由调度得到处理机,便可立即投入执行。处于执行状态的进程因时间片到而放弃处理机进入就绪状态,因等待某个事件发生而放弃处理机进入等待状态。处于等待状态的进程因等待的事件发生而被唤醒进入就绪状态,如图1。图1 进程状态转

14、换1.5.2 线程简介线程是一个进程内的基本调度单位,它既可以由操作系统内核控制,也可由用户程序控制。线程是由两个部分组成的:一个是线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量线程只由相关的堆栈(系统栈或用户栈)、寄存器和线程控制表TCB组成。寄存器可被用来存储线程内的局部变量,但不能存储其它线程的相关变量。线程也有三个基本状态:执行状态、就绪状态和阻塞状态。针对线程的三种基本状态,存在五种基本操作来转换线程的状态。这五种基本操作是:1、派生:线程在进程内派生出来,它既可由进程

15、派生,也可由线程派生。2、阻塞:如果一个线程在执行过程中需要等待某个事件发生,则被阻塞。3、激活:如果阻塞线程的事件发生,则该线程被激活并进入就绪队列。4、调度:选择一个就绪线程进入执行状态。5、结束:如果一个线程执行结束,它的寄存器上下文以及堆栈内容等将被释放。1.5.3 进程与线程的关系进程是不活泼的。若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,该线程负责执行包含在进程的地址空间中的代码。实际上,单个进程可能包含若干个线程,所有这些线程都“同时”执行进程地址空间中的代码。线程与资源分配无关,它属于某一个进程,并与进程内的其它线程一起共享进程的资源。当进程发生调度时,不同的

16、进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。为此,每个线程都有它自己的一组CPU寄存器和它自己的堆栈。每个进程至少拥有一个线程,来执行进程的地址空间中的代码。如果没有线程来执行进程的地址空间中的代码,那么进程就没有存在的理由了,系统就将自动撤消该进程和它的地址空间。若要使所有这些线程都能运行,操作系统就要为每个线程安排一定的CPU时间。它通过以一种循环方式为线程提供时间片(称为量程),造成一种假象,仿佛所有线程都是同时运行的一样。图3显示了在单个CPU的计算机上是如何实现这种运行方式的。如果计算机拥有多个CPU,那么操作系统就要使用复杂得多的算法来实现CPU上线程负载的

17、平衡。当创建一个进程时,系统会自动创建它的第一个线程,称为主线程。然后,该线程可以创建其他的线程,而这些线程又能创建更多的线程。1.5.4 Windows自带的任务管理器分析Windows任务管理器由性能、进程、应用程序三大部分组成。其实这三大部分是有机的联系在一起的,尤其是性能和进程,性能中除了CPU使用率以外,其余的数据都是由进程模块顺便取得的。Windows2000/XP的任务管理器通过 NtQuerySystemInformation 的调用来获取各类信息,如CPU使用率,内存使用率,句柄总数,线程总数,进程总数等等。在任务管理器中的几乎所有信息都是来自该函数。NtQuerySyste

18、mInformation函数隶属Ntdll.dll,是一个未公开的函数。其调用方式为:NTSTATUS NtQuerySystemInformation(SYSTEM_INFORMATION_CLASSSystemInformationClass,PVOID SystemInformation,ULONG SystemInformationLength,PULONG ReturnLength);SystemInformationClass:在SYSTEM_INFORMATION_CLASS中的枚举值之一, 声明返回信息的种类;SystemInformation:指到一个要求返回信息的缓冲区,这

19、个系统信息变量的尺寸和结构依赖于SystemInformationClass参数的值;SystemInformationLength:SystemInformation参数指定的缓冲区尺寸;ReturnLength:返回值尺寸。这个函数是一个正在修改的函数,在Windows2000和Windows XP中可用,但在Windows 98和Windows Me中不可用。而且该函数调用的入口参数非常之多,调用复杂。因此,在此次进程管理器的开发中,将使用其它方法来获取各类信息。2 主要功能及设计思路2.1 主要功能设计要求实现的主要功能进程管理功能,具体包括以下内容:(1)任务管理:列出所有当前运行的

20、窗口程序名、运行状态等信息;对它们进行终止、切换等操作。(2)进程管理:列出所有的Windows进程,以及进程所在的磁盘绝对路径,进程消耗资源状况等;列出所有进程的相关模块挂载名,模块所在磁盘的绝对路径以及进程的线程情况,包括资源占用情况、所在内存空间地址等;除核心进程外,所有的其他进程均可以被终止,能够尽量不丢失信息,在提升本管理进程级别后,也能够对系统的核心进程终止。;(3)系统性能显示:绘制CPU、内存使用率图,以描述系统性能;列出物理内存、虚拟内存和页文件的使用情况;显示系统当前信息,包括系统名、计算机名和用户名等。2.2 设计思路在Visual C+ 6.0环境设计一个基于对话框的应

21、用程序,类似于Windows自带的任务管理器,主窗口上添加一个标签控件,加入三个页面,分别是:任务、进程和系统性能信息。其中,任务页面显示当前正在运行的任务(可见且有窗口标题),用列表控件进行显示,并能够对任务进行操作,如:添加新任务,结束任务,切换任务等。进程页面显示当前系统正在运行的进程及相关的模块,线程等,用列表控件进行显示,并能够实行终止进程、进程列表保存到文件等操作。系统性能页面显示物理内存、虚拟内存和页文件等详细使用情况,CPU、内存的使用率,并绘制CPU使用率和内存使用率的图形,并用列表控件显示系统当前信息(系统名、计算机名和当前用户等)。3 详细设计程序主界面如图2。在主界面上

22、面设置了一个标签控件,并创建了任务列表、进程列表和系统信息三个页面,标签控件用于选择并显示页面。三个页面分别用于显示当前运行的窗口程序、进程及进程模块、系统资源使用情况。图2 主界面3.1 主框架的实现所设计的程序是基于对话框的程序。首先创建一个基于对话框的应用程序PcsMgr.exe, 在主对话框类PcsMgrDlg中添加一个标签控件用于放置任务、进程和系统信息等三个页面,如图3。图3 标签控件3.1.1 子对话框的显示子对话框的显示与切换,是通过标签控件完成的。当用户点击标签控件上的每一项时,分别显示对应页面的相关信息。要显示三个子对话框,需要添加三个对话框到工程中,并将Style属性设为

23、Child,Board设为None,取消标题栏。再分别创建三个对话框的类CTask ,CProcess,CChart,并定义这三个类的变量:CTask m_Task; /任务CProcess m_Process; /进程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

24、_CHART,m_Tab.GetActiveWindow();当用户选择标签中的一项是,为了将对应的对话框在标签控件中显示出来,需要在OnShowWindow(BOOL bShow,UINT nStatus)中添加代码相关代码。这样便可将在个对话框分别显示于标签控件的每个页面中,但要实现选择标签的不同项显示不同页面还需在OnSelchangeMaintab(NMHDR* pNMHDR,LRESULT* pResult)和OnSelchangingMaintab(NMHDR* pNMHDR,LRESULT* pResult)两函数中添加显示代码。void CPcsMgrDlg:OnSelchan

25、geMaintab(NMHDR* pNMHDR, LRESULT* pResult)switch(m_Tab.GetCurSel()case 0:m_Task.ShowWindow(SW_SHOW);/任务页面被选中,则显示任务页面m_Task.CenterWindow();break;case 1:m_Process.ShowWindow(SW_SHOW); /任务页面被选中,则显示进程页面m_Process.CenterWindow();break;case 2:m_Chart.ShowWindow(SW_SHOW); /任务页面被选中,则显示系统信息页面m_Chart.CenterWin

26、dow();break;3.1.2 实现菜单关机、注销、重起菜单命令是通过调用一个Windows API函数ExitWindowsEx()完成的。但在Windows 98和Windows 2000实现稍有不同。ExitWindowsEx()函数定义格式:BOOL ExitWindowsEx(UINT uFlags /操作DWORD dwReason /原因);在Windows 98实现“注销/重启/关机”功能将直接调用ExitWindiwsEx函数:ExitWindowsEx(EWX_LOGOFF,0); / 注销ExitWindowsEx(EWX_REBOOT,0); / 重启ExitWin

27、dowsEx(EWX_SHUTDOWN,0); / 关机在Windows 2000实现“注销/重启/关机”功能须取得高级权限:LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges0.Luid);tkp.PrivilegeCount = 1;tkp.Privileges0.Attributes = SE_PRIVILEGE_ENABLED;AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);ExitWindowsEx(FFlag,0);新建菜单直接

28、调用系统运行对话框:RUN RunFileDlg;RunFileDlg = (RUN)GetProcAddress(hShell32, MAKEINTRESOURCE(61);开机自动运行可在注册表的主键”HKEY_LOCAL_MACHINE”下的运行子键”SoftwareMicrosoftWindowsCurrentVersionRun”下写入和删除一个键值的方法实现。3.1.3 提升程序权限为了能够终止所有进程,需要提升本进程的权限:1、先调用GetCurrentProcess函数取得当前进程的句柄;2、然后调用OpenProcessToken打开当前进程的访问令牌;3、接着调用Looku

29、pPrivilegeValue函数取得你想提升的权限的值;4、最后调用AdjustTokenPrivileges函数给当前进程的访问令牌增加权限。相关代码是在CPcsMgrApp类的InitInstance()函数中添加。3.2 任务列表页面设计该类实现当前系统运行任务(有可见窗口的程序)的管理,如查看当前任务,添加新任务,结束任务,切换任务等。3.2.1 显示任务信息任务信息包括窗口中可见程序的程序名、路径、运行状态等信息,将在任务列表页面中添加一个列表控件,用于将任务信息显示出来,如图4。图4 任务列表要显示桌面窗口中的任务信息,首先要一个结构体类型用于存放任务的相关信息:typedef

30、structCString strTaskName; /窗口标题DWORD dwProcessID; /进程IDDWORD dwThreadID; /线程IDCString strRunState; /运行状态DWORD dwWndHandle; /窗口句柄TASK_IFNO,*PTASK_INFO;获取窗口标题,使用API标准函数GetWindowText ():char tempMAX_PATH;GetWindowText(hwnd,temp,sizeof(temp)获取进程及线程ID: TID=GetWindowThreadProcessId(hwnd,&PID);确定运行状态是利用Se

31、ndMessageTimeout向窗口发送消息而取得:if(SendMessageTimeout(hwnd,WM_SYSCOMMAND,NULL,NULL,SMTO_ABORTIFHUNG,1000,NULL)strRunState = 正在运行;elsestrRunState = 没有响应;然后添加任务信息到数组:TASK_IFNO ti;ti.strTaskName = temp;ti.dwProcessID = PID;ti.dwThreadID = TID;ti.dwWndHandle = (DWORD)hwnd;ti.strRunState = strRunState;pTaskTh

32、is-m_TaskInfoArray.Add(ti);最后把任务信息的每一行在任务列表中显示出来:for(int i=0;inewCount;i+)m_task.InsertItem(i,ti.strTaskName,i);/任务名str.Format(%d,ti.dwProcessID);m_task.SetItemText(i,1,str);/进程IDstr.Format(%d,ti.dwThreadID);m_task.SetItemText(i,2,str);/线程IDm_task.SetItemText(i,3,ti.strRunState);/运行状态3.2.2 结束任务结束任务操

33、作将调用SendMessageTimeout函数向要关闭的窗口发送关闭消息,如果没有响应则用TerminateProcess函数强行终止该窗口进程。if(!SendMessageTimeout(hwnd,WM_SYSCOMMAND,SC_CLOSE,NULL,SMTO_BLOCK|SMTO_ABORTIFHUNG,1000,NULL)HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, ti.dwProcessID);/打开进程TerminateProcess(hProcess,1);/强制终止该窗口进程CloseHandle(hP

34、rocess);3.2.3 切换任务我们知道,Windows 9x/2000中SetForegroundWindow函数当用户正在操作其他窗口时是不能强制某个窗口为前景窗口的,而是激活窗口并调用FlashWindowEx函数来通知用户。但是很多实际情况要求将激活窗口的同时将创建这个窗口的线程置为前景状态。碰到这种情况我们可以使用USER32.DLL中的几个未公开API函数。void SwitchToThisWindow (HWND hWnd, /被激活的窗口句柄BOOL bRestore /如果被极小化,则恢复窗口);typedef void (WINAPI *PROCSWITCHTOTHIS

35、WINDOW)(HWND,BOOL);PROCSWITCHTOTHISWINDOW SwitchToThisWindow;HMODULE hUser32 = GetModuleHandle(user32);SwitchToThisWindow = (PROCSWITCHTOTHISWINDOW)GetProcAddress(hUser32,SwitchToThisWindow);接下来只要用任何现存窗口的句柄调用这个函数即可,参数bRestore指定如果窗口极小化,是否恢复其原状态。SwitchToThisWindow(hWnd,TRUE);3.3 进程列表页面设计该页面主要实现显示当前系统正

36、在运行的所有进程并对其进程管理,如结束进程,显示进程模块信息,显示进程线程信息,保存进程信息在网页文件中等功能。同显示任务列表一样,我们将添加两个列表控件,分别显示所有进程信息和当前选择的进程的所以模块信息,如图5。图5 进程列表页面3.3.1 显示进程信息进程信息包括进程图标,进程名、进程ID、CPU使用率、内存使用率、优先级、线程数、父进程ID和进程路径等,如图6。图6 进程信息通过调用ToolHelp API函数可枚举所有运行的进程并取得进程路径,进程ID,父进程ID,线程数和优先级。要使用该类接口函数需要包含头文件tlhelp32.h。主要用到ToolHelp API中的以下几个函数:

37、1、hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);该函数用于创建一个系统进程快照,取得系统中的所有进程的信息。2、Process32First(hProcessSnap,&pe32);该函数取得快照中第一个进程信息,pe32参数是一个PROCESSENTRY32结构类型,该函数将取得的进程信息填充到pe32中。PROCESSENTRY32的定义如下:typedef struct tagPROCESSENTRY32DWORD dwSize;/结构大小DWORD cntUsage;DWORD th32ProcessID;

38、/进程IDULONG_PTR th32DefaultHeapID;DWORD th32ModuleID;DWORD cntThreads;/线程计数DWORD th32ParentProcessID;/父进程IDLONG pcPriClassBase;/优先级DWORD dwFlags;TCHAR szExeFileMAX_PATH;/进程路径PROCESSENTRY32,然后从该结构中解析出所需的进程名、进程ID、优先级、线程数、父进程ID和进程路径等信息。3、BOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);

39、该函数取得快照中下一个进程信息,参数同Process32First函数。进程基本信息的获取过程如图7。图7 进程基本信息的获取进程CPU使用率是使用Windows NT以上系统提供的性能监视器取得。Windows性能监视器所用的编程接口是以性能数据助手库(PDH.dll)及一系列 C/C+头文件(即pdh.h、pdhmsg.h和winperf.h,它们是操作系统附带的)的形式公开给用户的。部分主要代码如下:PDH_STATUS pdhStatus;PDH_FMT_COUNTERVALUE fmtValue;pdhStatus = PdhCollectQueryData(m_hQuery);/收

40、集数据pdhStatus = PdhGetFormattedCounterValue(hCounter,PDH_FMT_LONG,&dwctrType,&fmtValue);/得到格式化数据,fmtValue即是我们需要得到的CPU使用率数据。Windows 9X系统上不能通过以上方法获得CPU使用率,因此设计的该进程管理软件不能获取9X系统上进程的CPU使用率。要得到进程的内存使用率要用到Psapi.dll的函数GetProcessMemoryInfo,首先在Process.h 中定义WINAPI函数类型:GETPROCESSMEMORYINFO GetProcessMemoryInfo;,

41、再取得内存使用数:PROCESS_MEMORY_COUNTERS pmc;GetProcessMemoryInfo(hProcess,&pmc,sizeof(pmc);dwMemoryUse = pmc.WorkingSetSize;/内存使用大小pmc返回进程的内存使用信息,它是定义的一个PROCESS_MEMORY_COUNTERS结构,定义如下:typedef struct _PROCESS_MEMORY_COUNTERSDWORD cb;DWORD PageFaultCount;/结构尺寸SIZE_T PeakWorkingSetSize;/缺页数SIZE_T WorkingSetSi

42、ze;/当前工作集尺寸SIZE_T QuotaPeakPagedPoolUsage;/最高页池使用数SIZE_T QuotaPagedPoolUsage;/当前页池使用数SIZE_T QuotaPeakNonPagedPoolUsage;/最高无页池使用数SIZE_T QuotaNonPagedPoolUsage; /当前无页池使用数SIZE_T PagefileUsage;/当前分配页文件空间SIZE_T PeakPagefileUsage;/最高分配页文件空间PROCESS_MEMORY_COUNTERS,*PPROCESS_MEMORY_COUNTERS;3.3.2 显示模块及线程信息模

43、块信息有模块名、模块大小、基地址。直接通过ToolHelp API函数便可实现。主要用到的函数有:1、hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwPID )该函数用于创建指定进程的模块快照。2、Module32First(hModuleSnap,&me32);该函数获取指定进程的第一个模块信息,将取得的信息填充到me32中。me32是一个MODULEENTRY32结构类型,对它的定义如下:Typedef struct tagMODULEENTRY32DWORD dwSize; DWORD th32ModuleID;DWO

44、RD th32ProcessID;DWORD GlblcntUsage;DWORD ProccntUsage;BYTE * modBaseAddr;DWORD modBaseSize;HMODULE hModule;char szModuleMAX_MODULE_NAME32 + 1;char szExePathMAX_PATH;MODULEENTRY32;3、Module32Next(hModuleSnap,&me32)该函数获取指定进程的下一个模块信息。线程信息包括线程ID和线程优先级,也是通过ToolHelp API函数取得。1、hThreadSnap = CreateToolhelp3

45、2Snapshot(TH32CS_SNAPTHREAD,0);该函数创建指定进程的线程快照,取得所有线程信息。2、Thread32First(hThreadSnap,&te32);/取得指定进程的第一个线程信息将取得的信息填充到te32中。te32也是一个数据结构,它的定义和存放进程信息或存放模块信息的数据结构类似。typedef struct tagTHREADENTRY32DWORD dwSize;/结构体尺寸,必须在调用前指定DWORD cntUsage; DWORD th32ThreadID;/线程IDDWORD th32OwnerProcessID;/创建该线程的进程IDLONG tpBasePri;/基本优先级LONG tpDeltaPri;DWORD dwFlags; THREADENTRY32,*PTHREADENTRY32;3、Thread32Next(hThreadSnap,&te32);/取得指定进程的下一个模块信息。获取进程模块的过程如图8。图8 模块信息的获取3.3.3 结束进程进程只是提供了一段地址空间和内核对象,其运行是通过在其地址空间内的主线程来体现的。当主线程的进入点函数返回时,进程也就随之结束。这种进程的终止方式是进程的正常退出,进程中的所有线程资源都能够得到正确的清除。除了这种进程的正常推出方式外,有

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号