Windows进程管理工具设计与实现论文Word文件下载.docx

上传人:b****3 文档编号:16394727 上传时间:2022-11-23 格式:DOCX 页数:29 大小:316.26KB
下载 相关 举报
Windows进程管理工具设计与实现论文Word文件下载.docx_第1页
第1页 / 共29页
Windows进程管理工具设计与实现论文Word文件下载.docx_第2页
第2页 / 共29页
Windows进程管理工具设计与实现论文Word文件下载.docx_第3页
第3页 / 共29页
Windows进程管理工具设计与实现论文Word文件下载.docx_第4页
第4页 / 共29页
Windows进程管理工具设计与实现论文Word文件下载.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

Windows进程管理工具设计与实现论文Word文件下载.docx

《Windows进程管理工具设计与实现论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《Windows进程管理工具设计与实现论文Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。

Windows进程管理工具设计与实现论文Word文件下载.docx

1.5进程与线程简介1

1.5.1进程简介1

1.5.2线程简介3

1.5.3进程与线程的关系3

1.5.4Windows自带的任务管理器分析4

2主要功能及设计思路4

2.1主要功能4

2.2设计思路5

3详细设计5

3.1主框架的实现5

3.1.1子对话框的显示6

3.1.2实现菜单7

3.1.3提升程序权限8

3.2任务列表页面设计8

3.2.1显示任务信息8

3.2.2结束任务9

3.2.3切换任务10

3.3进程列表页面设计10

3.3.1显示进程信息11

3.3.2显示模块及线程信息13

3.3.3结束进程15

3.3.4删除文件16

3.3.5保存进程信息到文件17

3.4系统性能页面设计17

3.4.1绘制CPU使用率图17

3.4.2绘制内存使用率图19

3.4.3其他性能显示19

3.4.4系统信息显示20

4测试结果21

4.1测试环境21

4.2测试方法21

4.3测试结果21

结论23

参考文献23

致谢24

声明25

1引言

1.1课题背景

随着计算机的广泛应用,很多的软件被安装在计算机上,使计算机运行的程序进程越来越多;

很多的程序在运行时常出现异常(如不能正常结束、占用大量资源、发现异常的进程等)。

这些现象给我们的计算机使用及管理带来很多的不便。

为了给计算机上运行的程序进行很好的管理,现在出现了许多的进程管理工具软件。

课题设计的目的主要是为了检查综合运用以前所学知识(包括以前所学的一些关于计算机操作系统、进程、计算机安全、编程等知识)的能力,模拟Windows任务管理器,开发一个功能更完善的Windows进程管理软件,对任务、进程进行查看、结束等操作。

1.2国内外研究现状

从现状看来,Windows进程管理工具及其理论的研究,无论是国外还是国内,技术都相当成熟。

微软Windows操作系统系列(98和ME除外)都自带有进程管理器,但功能不是很完善,不能查看进程模块及线程信息,而许多其他版本的Windows进程管理软件都具有完善的功能。

1.3课题研究的意义

随着计算机技术的迅猛发展,计算机的运用给人们带来了很多便利,无论是学习,办公,还是商务。

一款好的系统管理软件能大大地提高计算机的使用和管理效率,进程管理器就能很好地对系统上运行的进程进行管理。

很多人都使用过进程管理器之类的软件,或者是Windows自带的任务管理器,它们都能够对进程进行管理。

课题设计选择开发一个进程管理器软件,能够使自己综合运用以前所学知识(包括操作系统、编程、系统安全等知识)的能力,同时也使自己了解当今软件编程的一些新技术;

既锻炼了自己的实际动手能力,又引导自己进行了一次模拟实际产品的开发,对于自己以后工作能力的培养具有重要的意义。

1.4课题的研究方法

系统使用VC++6.0的开发环境,模拟Windows的任务管理器进行设计与开发。

因此,课题设计应首先分析进程管理器软件的相关功能;

其次,综合运用以前所学的相关知识,广泛查阅资料(尤其是进程、线程及其相关知识),选择所熟悉的开发工具进行开发;

同时,在开发设计与实现中,要保存好相关的设计文挡。

1.5进程与线程简介

1.5.1进程简介

进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:

一个是操作系统用来管理进程的内核对象。

内核对象也是系统用来存放关于进程的统计信息的地方。

另一个是地址空间,它包含所有可执行模块或DLL模块的代码和数据。

它还包含动态内存分配的空间。

如线程堆栈和堆分配空间。

进程是一个动态的执行过程,它动态地被创建,并被调度执行后消亡。

进程是资源分配的基本单位,也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。

系统中需要有描述进程存在和能够反应其变化的物理实体,即进程的静态描述。

进程的静态描述由三部份组成:

进程控件块PCB,有关程序段和该程序段对其进行操作的数据结构集。

进程控制块包含了有关进程的描述信息、控制信息以及资源信息,是进程动态特征的集中反应。

系统根据PCB感知进程的存在和通过PCB中所包含的各项变量的变化,掌握进程所处的状态以及达到控制进程活动的目的。

由于进程的PCB是系统感知进程的唯一实体,因此,在几乎所有的多道操作系统中,一个进程的PCB结构都是全部或部分常驻内存的。

进程的程序部分描述进程所要完成的功能。

而数据结构集是程序在执行时必不可少的工作区和操作对象。

这两部分是进程完成所需功能的物质基础。

由于进程的这两部分内容与控制进程的执行及完成进程功能直接有关,因而,在大部分多道操作系统中,这两部分内容存放在外存中,直到该进程执行时再调入内存。

一个进程的生命周期可以划分为一组状态,这些状态描述了整个进程。

系统根据PCB结构中的状态值控制进程。

在进程的整个生命周期内,一个进程至少具有三种基本状态,它们是:

执行状态、等待状态和就绪状态。

这三种状态之间可以相互换,处于就绪状态的进程已经得到除CPU之外的其它资源,只要由调度得到处理机,便可立即投入执行。

处于执行状态的进程因时间片到而放弃处理机进入就绪状态,因等待某个事件发生而放弃处理机进入等待状态。

处于等待状态的进程因等待的事件发生而被唤醒进入就绪状态,如图1。

 

图1进程状态转换

1.5.2线程简介

线程是一个进程内的基本调度单位,它既可以由操作系统内核控制,也可由用户程序控制。

线程是由两个部分组成的:

一个是线程的内核对象,操作系统用它来对线程实施管理。

内核对象也是系统用来存放线程统计信息的地方。

另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量

线程只由相关的堆栈(系统栈或用户栈)、寄存器和线程控制表TCB组成。

寄存器可被用来存储线程内的局部变量,但不能存储其它线程的相关变量。

线程也有三个基本状态:

执行状态、就绪状态和阻塞状态。

针对线程的三种基本状态,存在五种基本操作来转换线程的状态。

这五种基本操作是:

1、派生:

线程在进程内派生出来,它既可由进程派生,也可由线程派生。

2、阻塞:

如果一个线程在执行过程中需要等待某个事件发生,则被阻塞。

3、激活:

如果阻塞线程的事件发生,则该线程被激活并进入就绪队列。

4、调度:

选择一个就绪线程进入执行状态。

5、结束:

如果一个线程执行结束,它的寄存器上下文以及堆栈内容等将被释放。

1.5.3进程与线程的关系

进程是不活泼的。

若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,该线程负责执行包含在进程的地址空间中的代码。

实际上,单个进程可能包含若干个线程,所有这些线程都“同时”执行进程地址空间中的代码。

线程与资源分配无关,它属于某一个进程,并与进程内的其它线程一起共享进程的资源。

当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。

为此,每个线程都有它自己的一组CPU寄存器和它自己的堆栈。

每个进程至少拥有一个线程,来执行进程的地址空间中的代码。

如果没有线程来执行进程的地址空间中的代码,那么进程就没有存在的理由了,系统就将自动撤消该进程和它的地址空间。

若要使所有这些线程都能运行,操作系统就要为每个线程安排一定的CPU时间。

它通过以一种循环方式为线程提供时间片(称为量程),造成一种假象,仿佛所有线程都是同时运行的一样。

图3显示了在单个CPU的计算机上是如何实现这种运行方式的。

如果计算机拥有多个CPU,那么操作系统就要使用复杂得多的算法来实现CPU上线程负载的平衡。

当创建一个进程时,系统会自动创建它的第一个线程,称为主线程。

然后,该线程可以创建其他的线程,而这些线程又能创建更多的线程。

1.5.4Windows自带的任务管理器分析

Windows任务管理器由性能、进程、应用程序三大部分组成。

其实这三大部分是有机的联系在一起的,尤其是性能和进程,性能中除了CPU使用率以外,其余的数据都是由进程模块顺便取得的。

Windows2000/XP的任务管理器通过NtQuerySystemInformation的调用来获取各类信息,如CPU使用率,内存使用率,句柄总数,线程总数,进程总数等等。

在任务管理器中的几乎所有信息都是来自该函数。

NtQuerySystemInformation函数隶属Ntdll.dll,是一个未公开的函数。

其调用方式为:

NTSTATUSNtQuerySystemInformation(SYSTEM_INFORMATION_CLASS

SystemInformationClass,PVOIDSystemInformation,

ULONGSystemInformationLength,PULONGReturnLength);

SystemInformationClass:

在SYSTEM_INFORMATION_CLASS中的枚举值之一,声明返回信息的种类;

SystemInformation:

指到一个要求返回信息的缓冲区,这个系统信息变量的尺寸和结构依赖于SystemInformationClass参数的值;

SystemInformationLength:

SystemInformation参数指定的缓冲区尺寸;

ReturnLength:

返回值尺寸。

这个函数是一个正在修改的函数,在Windows2000和WindowsXP中可用,但在Windows98和WindowsMe中不可用。

而且该函数调用的入口参数非常之多,调用复杂。

因此,在此次进程管理器的开发中,将使用其它方法来获取各类信息。

2主要功能及设计思路

2.1主要功能

设计要求实现的主要功能——进程管理功能,具体包括以下内容:

(1)任务管理:

列出所有当前运行的窗口程序名、运行状态等信息;

对它们进行终止、切换等操作。

(2)进程管理:

列出所有的Windows进程,以及进程所在的磁盘绝对路径,进程消耗资源状况等;

列出所有进程的相关模块挂载名,模块所在磁盘的绝对路径以及进程的线程情况,包括资源占用情况、所在内存空间地址等;

除核心进程外,所有的其他进程均可以被终止,能够尽量不丢失信息,在提升本管理进程级别后,也能够对系统的核心进程终止。

(3)系统性能显示:

绘制CPU、内存使用率图,以描述系统性能;

列出物理内存、虚拟内存和页文件的使用情况;

显示系统当前信息,包括系统名、计算机名和用户名等。

2.2设计思路

在VisualC++6.0环境设计一个基于对话框的应用程序,类似于Windows自带的任务管理器,主窗口上添加一个标签控件,加入三个页面,分别是:

任务、进程和系统性能信息。

其中,任务页面显示当前正在运行的任务(可见且有窗口标题),用列表控件进行显示,并能够对任务进行操作,如:

添加新任务,结束任务,切换任务等。

进程页面显示当前系统正在运行的进程及相关的模块,线程等,用列表控件进行显示,并能够实行终止进程、进程列表保存到文件等操作。

系统性能页面显示物理内存、虚拟内存和页文件等详细使用情况,CPU、内存的使用率,并绘制CPU使用率和内存使用率的图形,并用列表控件显示系统当前信息(系统名、计算机名和当前用户等)。

3详细设计

程序主界面如图2。

在主界面上面设置了一个标签控件,并创建了任务列表、进程列表和系统信息三个页面,标签控件用于选择并显示页面。

图2主界面

3.1主框架的实现

所设计的程序是基于对话框的程序。

首先创建一个基于对话框的应用程序PcsMgr.exe,在主对话框类PcsMgrDlg中添加一个标签控件用于放置任务、进程和系统信息等三个页面,如图3。

图3标签控件

3.1.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());

当用户选择标签中的一项是,为了将对应的对话框在标签控件中显示出来,需要在OnShowWindow(BOOLbShow,UINTnStatus)中添加代码相关代码。

这样便可将在个对话框分别显示于标签控件的每个页面中,但要实现选择标签的不同项显示不同页面还需在OnSelchangeMaintab(NMHDR*pNMHDR,LRESULT*pResult)和OnSelchangingMaintab(NMHDR*pNMHDR,LRESULT*pResult)两函数中添加显示代码。

voidCPcsMgrDlg:

:

OnSelchangeMaintab(NMHDR*pNMHDR,LRESULT*pResult)

{switch(m_Tab.GetCurSel())

{

case0:

m_Task.ShowWindow(SW_SHOW);

//任务页面被选中,则显示任务页面

m_Task.CenterWindow();

break;

case1:

m_Process.ShowWindow(SW_SHOW);

//任务页面被选中,则显示进程页面

m_Process.CenterWindow();

case2:

m_Chart.ShowWindow(SW_SHOW);

//任务页面被选中,则显示系统信息页面

m_Chart.CenterWindow();

}

}

3.1.2实现菜单

关机、注销、重起菜单命令是通过调用一个WindowsAPI函数ExitWindowsEx()完成的。

但在Windows98和Windows2000实现稍有不同。

ExitWindowsEx()函数定义格式:

BOOLExitWindowsEx(

UINTuFlags//操作

DWORDdwReason//原因

);

在Windows98实现“注销/重启/关机”功能将直接调用ExitWindiwsEx函数:

ExitWindowsEx(EWX_LOGOFF,0);

//注销

ExitWindowsEx(EWX_REBOOT,0);

//重启

ExitWindowsEx(EWX_SHUTDOWN,0);

//关机

在Windows2000实现“注销/重启/关机”功能须取得高级权限:

LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&

tkp.Privileges[0].Luid);

tkp.PrivilegeCount=1;

tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken,FALSE,&

tkp,0,(PTOKEN_PRIVILEGES)NULL,0);

ExitWindowsEx(FFlag,0);

新建菜单直接调用系统运行对话框:

RUNRunFileDlg;

RunFileDlg=(RUN)GetProcAddress(hShell32,MAKEINTRESOURCE(61));

开机自动运行可在注册表的主键”HKEY_LOCAL_MACHINE”下的运行子键”Software\Microsoft\Windows\CurrentVersion\Run”下写入和删除一个键值的方法实现。

3.1.3提升程序权限

为了能够终止所有进程,需要提升本进程的权限:

1、先调用GetCurrentProcess函数取得当前进程的句柄;

2、然后调用OpenProcessToken打开当前进程的访问令牌;

3、接着调用LookupPrivilegeValue函数取得你想提升的权限的值;

4、最后调用AdjustTokenPrivileges函数给当前进程的访问令牌增加权限。

相关代码是在CPcsMgrApp类的InitInstance()函数中添加。

3.2任务列表页面设计

该类实现当前系统运行任务(有可见窗口的程序)的管理,如查看当前任务,添加新任务,结束任务,切换任务等。

3.2.1显示任务信息

任务信息包括窗口中可见程序的程序名、路径、运行状态等信息,将在任务列表页面中添加一个列表控件,用于将任务信息显示出来,如图4。

图4任务列表

要显示桌面窗口中的任务信息,首先要一个结构体类型用于存放任务的相关信息:

typedefstruct

{

CStringstrTaskName;

//窗口标题

DWORDdwProcessID;

//进程ID

DWORDdwThreadID;

//线程ID

CStringstrRunState;

//运行状态

DWORDdwWndHandle;

//窗口句柄

}TASK_IFNO,*PTASK_INFO;

获取窗口标题,使用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

没有响应"

然后添加任务信息到数组:

TASK_IFNOti;

ti.strTaskName=temp;

ti.dwProcessID=PID;

ti.dwThreadID=TID;

ti.dwWndHandle=(DWORD)hwnd;

ti.strRunState=strRunState;

pTaskThis->

m_TaskInfoArray.Add(ti);

最后把任务信息的每一行在任务列表中显示出来:

for(inti=0;

i<

newCount;

i++)

m_task.Insert

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

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1