《 Windows XP 进程的一》实验指导书(模板)_第1页
《 Windows XP 进程的一》实验指导书(模板)_第2页
《 Windows XP 进程的一》实验指导书(模板)_第3页
《 Windows XP 进程的一》实验指导书(模板)_第4页
《 Windows XP 进程的一》实验指导书(模板)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、IpApplivationNAMELPCTSTR IpCommandLineLPSECURIITY_ATTRIBUTESIpProcessAttributesLPSECURIITY_ATTRIBUTESIpThreadAttributesBOOL blnheritHandleDWORD dwCreationFlageLPVOID IpEnvironmentLPCTSTR IpCurrentDirectorySTARTUPINFO IpStartupInfo特殊的创立标志(如CREATE.SUSPENDED)的位标记向新进程发送的一套环境变量;如为null值那么发送调用者环境新进程的启动目录一S

2、TARTUPINFO结构,包括新进程LPPROCESSJNFORMATIONIpProcessInformation的输入和输出配置的详情调用的结果块;发送新应用程序的进程和主线程的句柄和1D实验2 Windows XP进程的一生(实验估计时间:100分钟)背景知识Windows XP所创立的每个进程都从调用CreateProcess() API函数开始, 该函数的任务是在对象管理器子系统内初始化进程对象。每一进程都以调用 ExitProcess。或TerminateProcess。API函数终止。通常应用程序的框架负责 调用ExitProcess。函数,对于C+运行库来说,这一调用发生在应用

3、程序的 main()函数返回之后。.创立进程CreateProcess()调用的核心参数是可执行文件运行时的文件名及其命令行。表 2-1详细地列出了每个参数的类型和名称。表2-1实验记录参数名称使用目的LPCTSTR全部或局部地指明包括可执行代码的EXE文件的文件名向可执行文件发送的参数 一 返回进程句柄的平安属性,主要指 明这一句柄是否应该由其他子进程 所继承。返回进程的主线程的句柄的平安属 性一种标志,告诉系统允许新进程继 承创立者进程的句柄可以指定第一个参数,即应用程序的名称,其中包括相对于当前进程的 当前目录的全路径或者利用搜索方法找到路径;IpCommandLine参数允许 调用者向

4、新应用程序发送数据;接下来的三个参数与进程和它的主线程以及 返回的指向该对象的句柄的平安性有关。然后是标志参数,用以在dwCreationFlags参数中指明系统应该给予新 进程什么行为。经常使用的标志是CREATE_SUSPNDED,告诉主线程立刻 暂停。当准备好时,应该使用ResumeThreadO API来启动进程。另一个常3.1背景知识用的标志是CREATE_NEW_CONSOLE,告诉新进程启动自己的控制台窗口,而不是利用父窗口,这一参数还允许设置进程的优先级,用以向系 统指明,相对于系统中所有其他的活动进程来说,给此进程多少CPU时间。接着是CreateProcess()函数调用所

5、需要的三个通常使用缺省值的参数,第一个参数是IpEnvironment参数,指明为新进程提供的环境;第二个参数是 IpCurrentDirectory,可用于向主创进程发送与缺省目录不同的新进程使用的 特殊的当前目录;第三个参数是STARTUPINFO数据结构中所必需的,用 于在必要时指明新应用程序的主窗口的外观。CreateProcess()的最后一个参数是用于新进程对象及其主线程的句柄和ID 的返回值缓冲区,以PROCESSNFORMATION结构中返回的句柄调用 Close_Handle() API函数是重要的,因为如果不将这些句柄关闭的话,有可 能危及主创进程终止之前的任何未释放的资源

6、。.正在运行的进程如果一个进程程拥有至少一个执行线程,那么为正在系统中运行的进程。通 常这种进程使用主线程来指示它的存在,当主线程结束时,调用ExitprocessO API函数,通知系统终止它所拥有的所有正在运行、准备运行或正如挂起的 其他线程。当进程正在运行时,可以查看它的许多特性,其中少数特性也允 许加以修改。首先可查看的进程特性是系统进程标识符(PID),可利用 GetCurrentProcessId() API 函数来查看,与GetCurrentProcess。相似,对该函 数的调用不能失败,但返回的PID在整个系统中都可使用,其他可显示当 前进程信息的API函数还有GetStart

7、Info()和 GetprocessShutdownParameters。,可给出进程存活期内的配置详情。通常,一个进程需要它运行期环境的信息,例如API函数 GetModuleFileName。和 GetcommandLine(),可以给出 CreateProcess。中的参 数以启动应用程序。在创立应用程序时可使用的另一个API函数是 IsDebuggerPresent()。可利用API函数GetGuiResources。来查看进程的GUI资源,此函数既可 返回指定进程中的翻开的GUI对象的数目,也可返回指定进程中翻开的 USER对象的数目。进程的其他性能信息可通过GetProcessIo

8、Counters() GetProcessPriorityBoost ()、GetProcessTimes。和GetProcessWorkingSetSize()API得到,以上这几个API函数都只需要具有 PROCESS_QUERY_INFORMATION访问权限的指向所感兴趣进程的句柄。另一个可用于进程信息查询的API函数是GetProcessVersion。,此函数只需感兴趣进程的PID (进程标识号)。.终止进程所有进程都是以调用ExitProcess()或者TerminateProcess()函数结束的,但最 好使用前者而不要使用后者,因为进程是在完成了它的所有的关闭“职责” 之后以

9、正常的终止方式来调用前者的。而外部进程通常调用后者即突 然终止进程的进行,由于关闭时的途径不太正常,有可能引起错误的行为。TerminateProcess() API 函数只要翻开带有 PROCESS.TERMINATE 访问 权的对象,就可以终止进程,并向系统返回指定的代码,这是一种“野蛮” 的终止进程的方式,但是有时却是需要的。如果开发人员确实有机会来设计“谋杀”(终止别的进程的进程)和“受害”进程(被终止的进程)时,应该创立一个进程间通信的内核对象, 如一个互斥程序,这样一来,“受害”进程只在等待或同期性地测试它是 否应该终止。实验目的1)通过创立进程、观察正在运行的进程和终止进程的程序

10、设计和调试操 作, 进一步熟悉操作系统的进程概念,理解Windows XP进程的“一生”。2)通过编写和分析实验程序,学习创立进程、观察进程和终止进程的程序 设计方法。工具/准备工作在开始本实验之前,请回顾教科书的相关内容。您需要做以下准备:一台运行Windows XP Professional操作系统的计算机。2)计算机中需安装Visual C+6.0专业版或企业版。实验内容与步骤请回答:Windows所创立的每个进程都是以调用 API函数开始和以调用或 API函数终止。1、创立进程本实验学习创立进程的基本框架。该程序要求启动自身,显示它的系统进 程ID和它在进程列表中的位置。捌聚 1:登录

11、进入 Windows XP Professional o步骤2:在“开始”菜单中单击“程序、Microsoft Visual Studio 6.0u Microsoft Visual C+ 6.0 v ,进入 Visual C+窗 口。步骤3:在工具栏单击“新建”按钮,输入代码保存为2-l.cppo参考类和函数:windows.h、iostream、stdio.h、StartClone()GetModuleFileName ZeroMemory o例如下面代码:#include #include int main(VOID) STARTUPINFO si;该结构用于指定新进程的主窗口特性PRO

12、CESSJNFORMATION pi;返回进程信息ZeroMemory(&si,sizeof(si);si.cb=sizeof(si);ZeroMemory (&pi,sizeof(pi);if(! CreateProcess(NULL,nC:WindowsSystem32notepad.exeH, /calc.exeNULL,NULL,FALSE,0,NULL,NULL,&si,&pi)(fprintf(stderr/Creat Process FailedH);return -1;)WaitForSingleObject(pi.hProcess,INFINITE);printf(Hchil

13、d Complete);CloseHandle(pi.hProcess);CloseHandle(pi. hThread);步骤4:单击“Build”菜单中的“Compile 2-Lcpp”命令,对2-l.cpp进 行编译。步骤5:编译完成后,单击“Build”菜单中的“Build2-l.exe”命令,建立2-l.exe可执行文件。操作能否正常进行,如果不行,原因是什么?步骤6:在工具栏单击“Executeprogram”按钮,或者按Ctrl+F5键,或者单击“Build”菜单中的“Execute2-l.exe”命令,执行2-l.exe程序。步骤7:按Ctrl+S键可暂停程序的执行,按Ctrl

14、+Pause (Break)键可终止 程序的执行。2.正在运行的进程本实验用进程信息查询的API函数GetProcessVersion()与GetVersionEx(),确定 运行进程的操作系统的版本号。步骤1:在工具栏单击“新建”按钮,编写代码保存为2-2.cpp。参考代码:#include#include利用进程和操作系统的版本信息的简单例如void main()(提取这个进程的ID号DWORD dwIdThis=:GetCurrentProcessId();/获得这一进程和报告所需的版本,也可以发送0以便指明这一进程DW ORD dwV erReq=: GetProcessV ersio

15、n(dwIdThis);WORD wMajorReq=(WORD)dwVerReq16;WORD wMinorReq=(WORD)(dwVerReq& Oxffff);std:coutnProcess ID:n dwIdThi sn,requires OS:nwMaj orReqwMinorReqstd: endl;/设置版本信息的数据结构,以便保存操作系统的版本信息OSVERSIONINFOEX osvix;:ZeroMemory(&osvix,sizeof(osvix);osvix.dwOSVersionInfbSize=sizeof(osvix);/提取版本信息和报告:GetVersio

16、nEx(reinterpret_cast(&osvix); std:coutnRunning onOS:nosvix.dwMajorVersionn.nosvix.dwMinorVersionstd:endl;/如果是 NTS (Windows2000)系统,那么提高其优先权if(osvix.dwPlatformId=VER_PLATFORM_WIN32_NT&osvix.dwMajorVersion=5)(改变优先级SetPriorityClass(:GetCurrentProcess()/利用这一进程,HIGH_PRIORITY_CLASS);改变为 high报告给用户std:coutnT

17、ask Manager should now now indicate this”process is high priority.nstd:endl;)步骤2:单击“Build”菜单中的“Compile2-2.cpp”命令,系统对2-.cpp进行编译。步骤3:编译完成后,单击“Build”菜单中的“Build2-2.exe”命令,建 立2-2.exe可执行文件。操作能否正常进行,如果不行,原因是什么?步骤4:在工具栏单击“Executeprogram”按钮,执行2-2.exe程序。运行结果:当前PID信息:当前操作系统版本:系统提示信息:除了改变进程的优先级以外,还可以对正在运行的进程执行几

18、项其他的操 作,只要获得其进程句柄即可,SetProcessAffinityMask() API函数允许开发 人员将线程映射到处理器上;SetProcessAffinityBoost() API可关闭前台应用 程序优先级的提升;而SetProcessWorkingSet() API可调节进程可用的非页 面RAM的容量;还有一个只对当前进程可用的API函数,即 SetProcessShutdownParameters(),可告诉系统如何终止该进程。.终止进程下面给出了一个终止进程的应用程序(文件名为4-3.cpp),它先创立一 个子进程,然后命令它发出“自杀弹”互斥体去终止自身的运行。阅读该程序

19、并 完成实验任务。步骤1:在工具栏单击“新建”按钮,编写代码保存为2-3.cpp0参考代码:#include#include#includestatic LPCTSTR g_szMutexName=H11;创立当前进程的克隆进程的简单方法void StartClone()(提取当前可执行文件的文件名TCHAR szFilenameMAX_PATH;:GetModuleFileName(NULL,szFilename,MAX_PATH);格式化用于子进程的命令行,指明它是一个EXE文件和子进程TCHAR szCmdLineMAX_PATH;:sprintf(szCmdLine,nn%snchil

20、dn,szFilename);子进程的启动信息结构STARTUPINFO si;:ZeroMemory(reinterpret_cast(&si),sizeof(si);si.cb=sizeof(si);应当是此结构的大小/返回的用于子进程的进程信息PROCESS_INFORMATION pi;用同样的可执行文件名和命令行创立进程,并指明它是一个子进程BOOL bCreateOK=: :CreateProcess(szFilename,产生的应用程序名称(本EXE文件)szCmdLine,告诉人们这是一个子进程的标志NULL,用于进程的默认的平安性NULL,用于线程的默认平安性FALSE,/不

21、继承句柄CREATE_NEW_CONSOLE, 创立新窗口 ,使输出更直观NULL,新环境&pi);返回的进程的信息&si,启动信息结构释放指向子进程的引用if(bCreateOK)(:CloseHandle(pi.hProcess);:CloseHandle(pi.hThread);)void Parent()(创立咱杀”互斥程序体HANDLE hMutexSuicide=CreateMutex(NULL,默认的平安性TRUE,最初拥有的g_szMutexName);为其命名if(hMutexSuicide !=NULL)创立子进程std:coutHCreating the child process.Hstd : endl;:StartClone();/暂停Sleep(5000);指令子进程杀掉自身std:coutHTelling the child process to quit.nstd:endl;:

温馨提示

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

评论

0/150

提交评论