版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、IpApplivationNAMELPCTSTR IpCommandLineLPSECURIITY_ATTRIBUTESIpProcessAttributesLPSECURIITY_ATTRIBUTESIpThreadAttributesBOOL blnheritHandleDWORD dwCreationFlageLPVOID IpEnvironmentLPCTSTR IpCurrentDirectorySTARTUPINFO IpStartupInfo特殊的創(chuàng)立標(biāo)志(如CREATE.SUSPENDED)的位標(biāo)記向新進(jìn)程發(fā)送的一套環(huán)境變量;如為null值那么發(fā)送調(diào)用者環(huán)境新進(jìn)程的啟動(dòng)目錄一S
2、TARTUPINFO結(jié)構(gòu),包括新進(jìn)程LPPROCESSJNFORMATIONIpProcessInformation的輸入和輸出配置的詳情調(diào)用的結(jié)果塊;發(fā)送新應(yīng)用程序的進(jìn)程和主線程的句柄和1D實(shí)驗(yàn)2 Windows XP進(jìn)程的一生(實(shí)驗(yàn)估計(jì)時(shí)間:100分鐘)背景知識Windows XP所創(chuàng)立的每個(gè)進(jìn)程都從調(diào)用CreateProcess() API函數(shù)開始, 該函數(shù)的任務(wù)是在對象管理器子系統(tǒng)內(nèi)初始化進(jìn)程對象。每一進(jìn)程都以調(diào)用 ExitProcess?;騎erminateProcess。API函數(shù)終止。通常應(yīng)用程序的框架負(fù)責(zé) 調(diào)用ExitProcess。函數(shù),對于C+運(yùn)行庫來說,這一調(diào)用發(fā)生在應(yīng)用
3、程序的 main()函數(shù)返回之后。.創(chuàng)立進(jìn)程CreateProcess()調(diào)用的核心參數(shù)是可執(zhí)行文件運(yùn)行時(shí)的文件名及其命令行。表 2-1詳細(xì)地列出了每個(gè)參數(shù)的類型和名稱。表2-1實(shí)驗(yàn)記錄參數(shù)名稱使用目的LPCTSTR全部或局部地指明包括可執(zhí)行代碼的EXE文件的文件名向可執(zhí)行文件發(fā)送的參數(shù) 一 返回進(jìn)程句柄的平安屬性,主要指 明這一句柄是否應(yīng)該由其他子進(jìn)程 所繼承。返回進(jìn)程的主線程的句柄的平安屬 性一種標(biāo)志,告訴系統(tǒng)允許新進(jìn)程繼 承創(chuàng)立者進(jìn)程的句柄可以指定第一個(gè)參數(shù),即應(yīng)用程序的名稱,其中包括相對于當(dāng)前進(jìn)程的 當(dāng)前目錄的全路徑或者利用搜索方法找到路徑;IpCommandLine參數(shù)允許 調(diào)用者向
4、新應(yīng)用程序發(fā)送數(shù)據(jù);接下來的三個(gè)參數(shù)與進(jìn)程和它的主線程以及 返回的指向該對象的句柄的平安性有關(guān)。然后是標(biāo)志參數(shù),用以在dwCreationFlags參數(shù)中指明系統(tǒng)應(yīng)該給予新 進(jìn)程什么行為。經(jīng)常使用的標(biāo)志是CREATE_SUSPNDED,告訴主線程立刻 暫停。當(dāng)準(zhǔn)備好時(shí),應(yīng)該使用ResumeThreadO API來啟動(dòng)進(jìn)程。另一個(gè)常3.1背景知識用的標(biāo)志是CREATE_NEW_CONSOLE,告訴新進(jìn)程啟動(dòng)自己的控制臺窗口,而不是利用父窗口,這一參數(shù)還允許設(shè)置進(jìn)程的優(yōu)先級,用以向系 統(tǒng)指明,相對于系統(tǒng)中所有其他的活動(dòng)進(jìn)程來說,給此進(jìn)程多少CPU時(shí)間。接著是CreateProcess()函數(shù)調(diào)用所
5、需要的三個(gè)通常使用缺省值的參數(shù),第一個(gè)參數(shù)是IpEnvironment參數(shù),指明為新進(jìn)程提供的環(huán)境;第二個(gè)參數(shù)是 IpCurrentDirectory,可用于向主創(chuàng)進(jìn)程發(fā)送與缺省目錄不同的新進(jìn)程使用的 特殊的當(dāng)前目錄;第三個(gè)參數(shù)是STARTUPINFO數(shù)據(jù)結(jié)構(gòu)中所必需的,用 于在必要時(shí)指明新應(yīng)用程序的主窗口的外觀。CreateProcess()的最后一個(gè)參數(shù)是用于新進(jìn)程對象及其主線程的句柄和ID 的返回值緩沖區(qū),以PROCESSNFORMATION結(jié)構(gòu)中返回的句柄調(diào)用 Close_Handle() API函數(shù)是重要的,因?yàn)槿绻粚⑦@些句柄關(guān)閉的話,有可 能危及主創(chuàng)進(jìn)程終止之前的任何未釋放的資源
6、。.正在運(yùn)行的進(jìn)程如果一個(gè)進(jìn)程程擁有至少一個(gè)執(zhí)行線程,那么為正在系統(tǒng)中運(yùn)行的進(jìn)程。通 常這種進(jìn)程使用主線程來指示它的存在,當(dāng)主線程結(jié)束時(shí),調(diào)用ExitprocessO API函數(shù),通知系統(tǒng)終止它所擁有的所有正在運(yùn)行、準(zhǔn)備運(yùn)行或正如掛起的 其他線程。當(dāng)進(jìn)程正在運(yùn)行時(shí),可以查看它的許多特性,其中少數(shù)特性也允 許加以修改。首先可查看的進(jìn)程特性是系統(tǒng)進(jìn)程標(biāo)識符(PID),可利用 GetCurrentProcessId() API 函數(shù)來查看,與GetCurrentProcess。相似,對該函 數(shù)的調(diào)用不能失敗,但返回的PID在整個(gè)系統(tǒng)中都可使用,其他可顯示當(dāng) 前進(jìn)程信息的API函數(shù)還有GetStart
7、Info()和 GetprocessShutdownParameters。,可給出進(jìn)程存活期內(nèi)的配置詳情。通常,一個(gè)進(jìn)程需要它運(yùn)行期環(huán)境的信息,例如API函數(shù) GetModuleFileName。和 GetcommandLine(),可以給出 CreateProcess。中的參 數(shù)以啟動(dòng)應(yīng)用程序。在創(chuàng)立應(yīng)用程序時(shí)可使用的另一個(gè)API函數(shù)是 IsDebuggerPresent()??衫肁PI函數(shù)GetGuiResources。來查看進(jìn)程的GUI資源,此函數(shù)既可 返回指定進(jìn)程中的翻開的GUI對象的數(shù)目,也可返回指定進(jìn)程中翻開的 USER對象的數(shù)目。進(jìn)程的其他性能信息可通過GetProcessIo
8、Counters() GetProcessPriorityBoost ()、GetProcessTimes。和GetProcessWorkingSetSize()API得到,以上這幾個(gè)API函數(shù)都只需要具有 PROCESS_QUERY_INFORMATION訪問權(quán)限的指向所感興趣進(jìn)程的句柄。另一個(gè)可用于進(jìn)程信息查詢的API函數(shù)是GetProcessVersion。,此函數(shù)只需感興趣進(jìn)程的PID (進(jìn)程標(biāo)識號)。.終止進(jìn)程所有進(jìn)程都是以調(diào)用ExitProcess()或者TerminateProcess()函數(shù)結(jié)束的,但最 好使用前者而不要使用后者,因?yàn)檫M(jìn)程是在完成了它的所有的關(guān)閉“職責(zé)” 之后以
9、正常的終止方式來調(diào)用前者的。而外部進(jìn)程通常調(diào)用后者即突 然終止進(jìn)程的進(jìn)行,由于關(guān)閉時(shí)的途徑不太正常,有可能引起錯(cuò)誤的行為。TerminateProcess() API 函數(shù)只要翻開帶有 PROCESS.TERMINATE 訪問 權(quán)的對象,就可以終止進(jìn)程,并向系統(tǒng)返回指定的代碼,這是一種“野蠻” 的終止進(jìn)程的方式,但是有時(shí)卻是需要的。如果開發(fā)人員確實(shí)有機(jī)會(huì)來設(shè)計(jì)“謀殺”(終止別的進(jìn)程的進(jìn)程)和“受害”進(jìn)程(被終止的進(jìn)程)時(shí),應(yīng)該創(chuàng)立一個(gè)進(jìn)程間通信的內(nèi)核對象, 如一個(gè)互斥程序,這樣一來,“受害”進(jìn)程只在等待或同期性地測試它是 否應(yīng)該終止。實(shí)驗(yàn)?zāi)康?)通過創(chuàng)立進(jìn)程、觀察正在運(yùn)行的進(jìn)程和終止進(jìn)程的程序
10、設(shè)計(jì)和調(diào)試操 作, 進(jìn)一步熟悉操作系統(tǒng)的進(jìn)程概念,理解Windows XP進(jìn)程的“一生”。2)通過編寫和分析實(shí)驗(yàn)程序,學(xué)習(xí)創(chuàng)立進(jìn)程、觀察進(jìn)程和終止進(jìn)程的程序 設(shè)計(jì)方法。工具/準(zhǔn)備工作在開始本實(shí)驗(yàn)之前,請回顧教科書的相關(guān)內(nèi)容。您需要做以下準(zhǔn)備:一臺運(yùn)行Windows XP Professional操作系統(tǒng)的計(jì)算機(jī)。2)計(jì)算機(jī)中需安裝Visual C+6.0專業(yè)版或企業(yè)版。實(shí)驗(yàn)內(nèi)容與步驟請回答:Windows所創(chuàng)立的每個(gè)進(jìn)程都是以調(diào)用 API函數(shù)開始和以調(diào)用或 API函數(shù)終止。1、創(chuàng)立進(jìn)程本實(shí)驗(yàn)學(xué)習(xí)創(chuàng)立進(jìn)程的基本框架。該程序要求啟動(dòng)自身,顯示它的系統(tǒng)進(jìn) 程ID和它在進(jìn)程列表中的位置。捌聚 1:登錄
11、進(jìn)入 Windows XP Professional o步驟2:在“開始”菜單中單擊“程序、Microsoft Visual Studio 6.0u Microsoft Visual C+ 6.0 v ,進(jìn)入 Visual C+窗 口。步驟3:在工具欄單擊“新建”按鈕,輸入代碼保存為2-l.cppo參考類和函數(shù):windows.h、iostream、stdio.h、StartClone()GetModuleFileName ZeroMemory o例如下面代碼:#include #include int main(VOID) STARTUPINFO si;該結(jié)構(gòu)用于指定新進(jìn)程的主窗口特性PRO
12、CESSJNFORMATION pi;返回進(jìn)程信息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進(jìn) 行編譯。步驟5:編譯完成后,單擊“Build”菜單中的“Build2-l.exe”命令,建立2-l.exe可執(zhí)行文件。操作能否正常進(jìn)行,如果不行,原因是什么?步驟6:在工具欄單擊“Executeprogram”按鈕,或者按Ctrl+F5鍵,或者單擊“Build”菜單中的“Execute2-l.exe”命令,執(zhí)行2-l.exe程序。步驟7:按Ctrl+S鍵可暫停程序的執(zhí)行,按Ctrl
14、+Pause (Break)鍵可終止 程序的執(zhí)行。2.正在運(yùn)行的進(jìn)程本實(shí)驗(yàn)用進(jìn)程信息查詢的API函數(shù)GetProcessVersion()與GetVersionEx(),確定 運(yùn)行進(jìn)程的操作系統(tǒng)的版本號。步驟1:在工具欄單擊“新建”按鈕,編寫代碼保存為2-2.cpp。參考代碼:#include#include利用進(jìn)程和操作系統(tǒng)的版本信息的簡單例如void main()(提取這個(gè)進(jìn)程的ID號DWORD dwIdThis=:GetCurrentProcessId();/獲得這一進(jìn)程和報(bào)告所需的版本,也可以發(fā)送0以便指明這一進(jìn)程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;/設(shè)置版本信息的數(shù)據(jù)結(jié)構(gòu),以便保存操作系統(tǒng)的版本信息OSVERSIONINFOEX osvix;:ZeroMemory(&osvix,sizeof(osvix);osvix.dwOSVersionInfbSize=sizeof(osvix);/提取版本信息和報(bào)告:GetVersio
16、nEx(reinterpret_cast(&osvix); std:coutnRunning onOS:nosvix.dwMajorVersionn.nosvix.dwMinorVersionstd:endl;/如果是 NTS (Windows2000)系統(tǒng),那么提高其優(yōu)先權(quán)if(osvix.dwPlatformId=VER_PLATFORM_WIN32_NT&osvix.dwMajorVersion=5)(改變優(yōu)先級SetPriorityClass(:GetCurrentProcess()/利用這一進(jìn)程,HIGH_PRIORITY_CLASS);改變?yōu)?high報(bào)告給用戶std:coutnT
17、ask Manager should now now indicate this”process is high priority.nstd:endl;)步驟2:單擊“Build”菜單中的“Compile2-2.cpp”命令,系統(tǒng)對2-.cpp進(jìn)行編譯。步驟3:編譯完成后,單擊“Build”菜單中的“Build2-2.exe”命令,建 立2-2.exe可執(zhí)行文件。操作能否正常進(jìn)行,如果不行,原因是什么?步驟4:在工具欄單擊“Executeprogram”按鈕,執(zhí)行2-2.exe程序。運(yùn)行結(jié)果:當(dāng)前PID信息:當(dāng)前操作系統(tǒng)版本:系統(tǒng)提示信息:除了改變進(jìn)程的優(yōu)先級以外,還可以對正在運(yùn)行的進(jìn)程執(zhí)行幾
18、項(xiàng)其他的操 作,只要獲得其進(jìn)程句柄即可,SetProcessAffinityMask() API函數(shù)允許開發(fā) 人員將線程映射到處理器上;SetProcessAffinityBoost() API可關(guān)閉前臺應(yīng)用 程序優(yōu)先級的提升;而SetProcessWorkingSet() API可調(diào)節(jié)進(jìn)程可用的非頁 面RAM的容量;還有一個(gè)只對當(dāng)前進(jìn)程可用的API函數(shù),即 SetProcessShutdownParameters(),可告訴系統(tǒng)如何終止該進(jìn)程。.終止進(jìn)程下面給出了一個(gè)終止進(jìn)程的應(yīng)用程序(文件名為4-3.cpp),它先創(chuàng)立一 個(gè)子進(jìn)程,然后命令它發(fā)出“自殺彈”互斥體去終止自身的運(yùn)行。閱讀該程序
19、并 完成實(shí)驗(yàn)任務(wù)。步驟1:在工具欄單擊“新建”按鈕,編寫代碼保存為2-3.cpp0參考代碼:#include#include#includestatic LPCTSTR g_szMutexName=H11;創(chuàng)立當(dāng)前進(jìn)程的克隆進(jìn)程的簡單方法void StartClone()(提取當(dāng)前可執(zhí)行文件的文件名TCHAR szFilenameMAX_PATH;:GetModuleFileName(NULL,szFilename,MAX_PATH);格式化用于子進(jìn)程的命令行,指明它是一個(gè)EXE文件和子進(jìn)程TCHAR szCmdLineMAX_PATH;:sprintf(szCmdLine,nn%snchil
20、dn,szFilename);子進(jìn)程的啟動(dòng)信息結(jié)構(gòu)STARTUPINFO si;:ZeroMemory(reinterpret_cast(&si),sizeof(si);si.cb=sizeof(si);應(yīng)當(dāng)是此結(jié)構(gòu)的大小/返回的用于子進(jìn)程的進(jìn)程信息PROCESS_INFORMATION pi;用同樣的可執(zhí)行文件名和命令行創(chuàng)立進(jìn)程,并指明它是一個(gè)子進(jìn)程BOOL bCreateOK=: :CreateProcess(szFilename,產(chǎn)生的應(yīng)用程序名稱(本EXE文件)szCmdLine,告訴人們這是一個(gè)子進(jìn)程的標(biāo)志NULL,用于進(jìn)程的默認(rèn)的平安性NULL,用于線程的默認(rèn)平安性FALSE,/不
21、繼承句柄CREATE_NEW_CONSOLE, 創(chuàng)立新窗口 ,使輸出更直觀NULL,新環(huán)境&pi);返回的進(jìn)程的信息&si,啟動(dòng)信息結(jié)構(gòu)釋放指向子進(jìn)程的引用if(bCreateOK)(:CloseHandle(pi.hProcess);:CloseHandle(pi.hThread);)void Parent()(創(chuàng)立咱殺”互斥程序體HANDLE hMutexSuicide=CreateMutex(NULL,默認(rèn)的平安性TRUE,最初擁有的g_szMutexName);為其命名if(hMutexSuicide !=NULL)創(chuàng)立子進(jìn)程std:coutHCreating the child process.Hstd : endl;:StartClone();/暫停Sleep(5000);指令子進(jìn)程殺掉自身std:coutHTelling the child process to quit.nstd:endl;:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度幕墻施工材料運(yùn)輸與倉儲合同4篇
- 2025年度企業(yè)債券發(fā)行承銷服務(wù)合同規(guī)范文本3篇
- 二零二五年度出租車司機(jī)勞動(dòng)合同及職業(yè)規(guī)劃合同4篇
- 二手車買賣合同:2024專用版版B版
- 二零二五年度體育賽事組織打字員賽事資料合同2篇
- 2025版專業(yè)技術(shù)人員培訓(xùn)服務(wù)標(biāo)準(zhǔn)合同
- 二零二五年度虛擬現(xiàn)實(shí)年薪制合同2篇
- 二零二五版互聯(lián)網(wǎng)直播內(nèi)容審核及分成合同4篇
- 防火排煙系統(tǒng)的設(shè)計(jì)與應(yīng)用
- 二零二五版木工行業(yè)電子商務(wù)平臺建設(shè)與合作合同3篇
- 垃圾車駕駛員聘用合同
- 2024年大宗貿(mào)易合作共贏協(xié)議書模板
- 新聞?dòng)浾咦C600道考試題-附標(biāo)準(zhǔn)答案
- 變壓器搬遷施工方案
- 單位轉(zhuǎn)賬個(gè)人合同模板
- 八年級語文下冊 成語故事 第十五課 諱疾忌醫(yī) 第六課時(shí) 口語交際教案 新教版(漢語)
- 中考語文二輪復(fù)習(xí):記敘文閱讀物象的作用(含練習(xí)題及答案)
- 2024年1月高考適應(yīng)性測試“九省聯(lián)考”數(shù)學(xué) 試題(學(xué)生版+解析版)
- (正式版)JBT 11270-2024 立體倉庫組合式鋼結(jié)構(gòu)貨架技術(shù)規(guī)范
- EPC項(xiàng)目采購階段質(zhì)量保證措施
- T-NAHIEM 101-2023 急診科建設(shè)與設(shè)備配置標(biāo)準(zhǔn)
評論
0/150
提交評論