实验1Windows2000进程的“⼀⽣”(实验报告)
实验1 Windows 2000进程的“⼀⽣”请回答:
Windows所创建的每个进程都是以调⽤CreateProcess() API函数开始和以调⽤ExitProcess() 或TerminateProcess() API函数终⽌。1、创建进程
步骤5:编译完成后,单击“Build”菜单中的“Build 1-1.exe”命令,建⽴1-1.exe可执⾏⽂件。操作能否正常进⾏?如果不⾏,则可能的原因是什么?答:不能。因为它没有终⽌进程的函数。
步骤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”菜单中的“Build 1-2.exe”命令,建⽴1-2.exe可执⾏⽂件。操作能否正常进⾏?如果不⾏,则可能的原因是什么?答:能正常运⾏
步骤11:在⼯具栏单击“Execute Program”(执⾏程序) 按钮,执⾏1-2.exe程序。运⾏结果:当前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”任务对应的进程映像名称是(为什么?) :____________________________________________________________________
右键单击该进程名,在快捷菜单中选择“设置优先级”命令,可以调整该进程的优先级,如设置为“⾼”后重新运⾏1-2.exe程序,屏幕显⽰有变化吗?为什么?
____________________________________________________________________
________________________________________________________________________________________________________________________________________________
除了改变进程的优先级以外,还可以对正在运⾏的进程执⾏⼏项其他的操作,只要获得其进程句柄即可。
SetProcessAffinityMask() API函数允许开发⼈员将线程映射到处理器上;SetProcessPriorityBoost() API可关闭前台应⽤程序优先级的提升;⽽SetProcessWorkingSet() API可调节进程可⽤的⾮页⾯RAM的容量;还有⼀个只对当前进程可⽤的API函数,即SetProcessShutdownParameters() ,可告诉系统如何终⽌该进程。3、终⽌进程
步骤15:编译完成后,单击“Build”菜单中的“Build 1-3.exe”命令,建⽴1-3.exe可执⾏⽂件。操作能否正常进⾏?如果不⾏,则可能的原因是什么?答:能
步骤16:在⼯具栏单击“Execute Program”按钮,执⾏1-3.exe程序。运⾏结果:
1)
表⽰:⼦进程正在等待指令
2)
表⽰:创建⼦进程;指令⼦进程“杀”掉⾃⼰。
步骤17:在熟悉清单1-3源代码的基础上,利⽤本实验介绍的API函数来尝试改进本程序(例如使⽤GetProcessTimes() API函数) 并运⾏。请描述你所做的⼯作:::
GetCurrentProcess()____________________________________________________________________
________________________________________________________________________________________________________________________________________________________________________________________________________________________4、实验总结:
通过这次实验的学习,我从基本上了解了windows 系统进程⽅⾯的知识,了解到了如何创建进程、运⾏进程和中⽌进程,也学到了好多新的函数。虽然对API函数的使⽤没能做到游刃有余,但是我坚信,在今后的不断加强学习中肯定能更上⼀层楼。