实验1Windows2000进程的“⼀⽣”(实验报告)
实验1 Windows 2000进程的“⼀⽣”
请回答:
Windows所创建的每个进程都是以调⽤CreateProcess() API函数开始和以调⽤ExitProcess() 或TerminateProcess() API函数终⽌。
1、创建进程
步骤5:编译完成后,单击“Build”菜单中的“”命令,建⽴可执⾏⽂件。
操作能否正常进⾏?如果不⾏,则可能的原因是什么?
答:不能。因为它没有终⽌进程的函数。
步骤7:按Ctrl + S键可暂停程序的执⾏,按Ctrl + Pause (Break) 键可终⽌程序的执⾏。
清单1-1展⽰的是⼀个简单的使⽤CreateProcess() API函数的例⼦。⾸先形成简单的命令⾏,提供当前的EXE⽂件的指定⽂件名和代表⽣成克隆进程的号码。⼤多数参数都可取缺省值,但是创建标志参数使⽤
了:CREATE_NEW_CONSOLE标志,指⽰新进程分配它⾃⼰的控制台,这使得运⾏⽰例程序时,在任务栏上产⽣许多活动标记。然后该克隆进程的创建⽅法关闭传递过来的句柄并返回main() 函数。在关闭程序之前,每⼀进程的执⾏主线程暂停⼀下,以便让⽤户看到其中的⾄少⼀个窗⼝。
CreateProcess() 函数有8个核⼼参数?本实验程序中设置的各个参数的值是:
a. szFilename;
b. NULL;
c. NULL;
d. FALSE;
e. CREATE_NEW_CONSOLE;
f. NULL;
g. NULL;
h. &pi。
程序运⾏时屏幕显⽰的信息是:
2、正在运⾏的进程
步骤10:编译完成后,单击“Build”菜单中的“”命令,建⽴可执⾏⽂件。
操作能否正常进⾏?如果不⾏,则可能的原因是什么?
答:能正常运⾏
步骤11:在⼯具栏单击“Execute Program”(执⾏程序) 按钮,执⾏程序。
运⾏结果:
当前PID信息:2608
当前操作系统版本:5.1
系统提⽰信息:
清单1-2中的程序向读者表明了如何获得当前的PID和所需的进程版本信息。为了运⾏
这⼀程序,系统处理了所有的版本不兼容问题。
接着,程序演⽰了如何使⽤GetVersionEx() API函数来提取OSVERSIONINFOEX结构。这⼀数据块中包括了操作系统的版本信息。其中,“OS : 5.0”表⽰当前运⾏的操作系统是:_5.0_
清单1-2的最后⼀段程序利⽤了操作系统的版本信息,以确认运⾏的是Windows 2000。代码接着将当前进程的优先级提⾼到⽐正常级别⾼。
步骤12:单击Ctrl + Alt + Del键,进⼊“Windows任务管理器”,在“应⽤程序”选项卡中右键单击“1-2”任务,在快捷菜单中选
择“转到进程”命令。
在“Windows任务管理器”的“进程”选项卡中,与“1-2”任务对应的进程映像名称是(为什么?) :
____________________________________________________________________
右键单击该进程名,在快捷菜单中选择“设置优先级”命令,可以调整该进程的优先级,如设置为“⾼”后重新运⾏程序,屏幕显⽰有变化吗?为什么?
____________________________________________________________________
________________________________________________________________________
________________________________________________________________________
除了改变进程的优先级以外,还可以对正在运⾏的进程执⾏⼏项其他的操作,只要获得其进程句柄即可。SetProcessAffinityMask() API函数允许开发⼈员将线程映射到处理器上;SetProcessPriorityBoost() API可关闭前台应⽤程序优先级的提升;⽽SetProcessWorkingSet() API可调节进程可⽤的⾮页⾯RAM的容量;还有⼀个只对当前进程可⽤的API函数,即SetProcessShutdownParameters() ,可告诉系统如何终⽌该进程。
3、终⽌进程
步骤15:编译完成后,单击“Build”菜单中的“”命令,建⽴可执⾏⽂件。
操作能否正常进⾏?如果不⾏,则可能的原因是什么?
答:能
步骤16:在⼯具栏单击“Execute Program”按钮,执⾏程序。
运⾏结果:
1)
表⽰:⼦进程正在等待指令
2)
表⽰:创建⼦进程;指令⼦进程“杀”掉⾃⼰。
步骤17:在熟悉清单1-3源代码的基础上,利⽤本实验介绍的API函数来尝试改进本程序(例如使⽤GetProcessTimes() API函数) 并运⾏。请描述你所做的⼯作:createprocessa
::
GetCurrentProcess()_________________________________________________________________
___
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
4、实验总结:
通过这次实验的学习,我从基本上了解了windows 系统进程⽅⾯的知识,了解到了如何创建进程、运⾏进程和中⽌进程,也学到了好多新的函数。虽然对API函数的使⽤没能做到游刃有余,但是我坚信,在今后的不断加强学习中肯定能更上⼀层楼。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。