實(shí)驗(yàn)一Windows2000進(jìn)程觀測_第1頁
實(shí)驗(yàn)一Windows2000進(jìn)程觀測_第2頁
實(shí)驗(yàn)一Windows2000進(jìn)程觀測_第3頁
實(shí)驗(yàn)一Windows2000進(jìn)程觀測_第4頁
實(shí)驗(yàn)一Windows2000進(jìn)程觀測_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)一Windows2000進(jìn)程觀測,一、背景知識(shí),Windows2000可以識(shí)別的應(yīng)用程序:控制臺(tái)應(yīng)用程序、GUI應(yīng)用程序和服務(wù)應(yīng)用程序。不同類型應(yīng)用程序間的唯一重要區(qū)別是啟動(dòng)方法。,Windows2000是以NT的技術(shù)構(gòu)建的,它提供了創(chuàng)建控制臺(tái)應(yīng)用程序的能力,使用戶可以利用標(biāo)準(zhǔn)的C+工具,如iostream庫中的cout和cin對象,來創(chuàng)建小型應(yīng)用程序。當(dāng)系統(tǒng)運(yùn)行時(shí),Windows2000的服務(wù)通常要向系統(tǒng)用戶提供所需功能。,服務(wù)應(yīng)用程序類型需要ServiceMail()函數(shù),由服務(wù)控制管理器(SCM)加以調(diào)用。SCM是操作系統(tǒng)的集成部分。其本身負(fù)責(zé)使應(yīng)用程序的行為像一個(gè)服務(wù)。通常,服務(wù)登

2、錄到特殊的LocalSystem賬號(hào)下,此賬號(hào)具有與開發(fā)人員創(chuàng)建的服務(wù)不同的權(quán)限。,當(dāng)令C+編譯器創(chuàng)建可執(zhí)行程序時(shí),編譯器將源代碼編譯成OBJ文件,然后將其與標(biāo)準(zhǔn)庫相鏈接。產(chǎn)生的EXE文件是裝載器指令、機(jī)器指令和應(yīng)用程序的數(shù)據(jù)的集合。裝載器指令告訴系統(tǒng)從哪里裝載機(jī)器代碼。另一個(gè)裝載器指令告訴系統(tǒng)從哪里開始執(zhí)行進(jìn)程的主線程。在進(jìn)行某些設(shè)置后,進(jìn)入開發(fā)者提供的main()、ServiceMain()或WinMain()函數(shù)的低級(jí)入口點(diǎn)。機(jī)器代碼中包括有控制邏輯,它能夠跳轉(zhuǎn)到WindowsAPI函數(shù),進(jìn)行計(jì)算或向磁盤寫入數(shù)據(jù)。,Windows允許開發(fā)人員將大型應(yīng)用程序分為較小的、互相有關(guān)系的服務(wù)模塊

3、,即動(dòng)態(tài)鏈接庫(DLL)代碼塊,在其中包含應(yīng)用程序所使用的機(jī)器代碼和應(yīng)用程序的數(shù)據(jù)。,二、實(shí)驗(yàn)?zāi)康?通過對Windows2000編程,進(jìn)一步熟悉操作系統(tǒng)的基本概念,較好地理解Windows2000的結(jié)構(gòu)。,三、實(shí)驗(yàn)內(nèi)容與步驟,1、簡單的控制臺(tái)應(yīng)用程序步驟1:登錄進(jìn)入Windows操作系統(tǒng)。步驟2:啟動(dòng)VisualC+6.0。File(文件)-New(新建)-Project(項(xiàng)目)-Win32consoleApplication(Win32控制臺(tái)項(xiàng)目)File(文件)-New(新建)-Files(文件)-C+sourcefiles步驟3:輸入下列代碼。,/hello項(xiàng)目#includevoidm

4、ain()std:cout“Hello,Windows2000”std:endl;,步驟4:編譯生成Hello.exe,并執(zhí)行。步驟5:運(yùn)行Hello.exe程序,產(chǎn)生用戶鍵入的一行文字。,2、GUI應(yīng)用程序利用C+編譯器創(chuàng)建一個(gè)GUI應(yīng)用程序,代碼中包括了WinMain()方法,這是GUI類型的應(yīng)用程序的標(biāo)準(zhǔn)入口點(diǎn)。,步驟1:啟動(dòng)VisualC+6.0。File(文件)-New(新建)-Project(項(xiàng)目)-Win32Application(Win32應(yīng)用項(xiàng)目)File(文件)-New(新建)-Files(文件)-C+sourcefiles步驟2:輸入下列代碼。步驟3:編譯生成.exe文件

5、。,/msgbox項(xiàng)目#include/標(biāo)準(zhǔn)的include/告訴連接器與包括MessageBoxAPI函數(shù)的user32庫進(jìn)行連接#pragmacomment(lib,“user32.lib”)/這是一個(gè)可以彈出信息框然后退出的筒單的應(yīng)用程序intAPIENTRYWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow):MessageBox(NULL,/沒有父窗口“Hello,Windows2000”,/消息框中的文本“Greetings”,/消息框標(biāo)題MB_OK);/其中只有一個(gè)OK按鈕/返回

6、0以便通知系統(tǒng)不進(jìn)入消息循環(huán)return(0);,在該GUI應(yīng)用程序中,首先需要windows.h頭文件,以便獲得傳送給WinMain()和MessageBox()API函數(shù)的數(shù)據(jù)類型定義。pragma指令指示編譯器/連接器找到user32.lib庫文件并將其與產(chǎn)生的exe文件連接起來。如果沒有pragma指令,則MessageBox()API函數(shù)就成為未定義的了。,WinMain()方法中有四個(gè)由實(shí)際的低級(jí)入口點(diǎn)傳遞來的參數(shù)。hInstance參數(shù)用來裝入與代碼相連的圖標(biāo)或位圖一類的資源,無論何時(shí),都可用GetModuleHandle()API函數(shù)將這些資源提取出來。系統(tǒng)利用實(shí)例句柄來指明代

7、碼和初始的數(shù)據(jù)裝在內(nèi)存的何處。句柄的數(shù)值實(shí)際上是exe文件映像的基地址,通常為0 x00400000。下一個(gè)參數(shù)hPrevInstance是為向后兼容而設(shè)的,現(xiàn)在系統(tǒng)將其設(shè)為NULL。應(yīng)用程序的命令行(不包括程序的名稱)是lpCmdLine參數(shù)。另外,系統(tǒng)利用nCmdShow參數(shù)告訴應(yīng)用程序如何顯示它的主窗口(選項(xiàng)包括最小化、最大化和正常)。,最后,程序調(diào)用MessageBox()API函數(shù)并退出。如果在進(jìn)入消息循環(huán)之前就結(jié)束運(yùn)行的話,最后必須返回0。,3、進(jìn)程對象操作系統(tǒng)將當(dāng)前運(yùn)行的應(yīng)用程序看作是進(jìn)程對象。利用系統(tǒng)提供的惟一的稱為句柄(HANDLE)的號(hào)碼,就可與進(jìn)程對象交互。這一號(hào)碼只對當(dāng)

8、前進(jìn)程有效。在系統(tǒng)中運(yùn)行的任何進(jìn)程都可調(diào)用GetCurrentProcess()API函數(shù),此函數(shù)可返回標(biāo)識(shí)進(jìn)程本身的句柄。然后就可在Windows需要該進(jìn)程的有關(guān)情況時(shí),利用這一句柄來提供。,步驟1:啟動(dòng)VisualC+6.0。File(文件)-New(新建)-Project(項(xiàng)目)-Win32consoleApplication(Win32控制臺(tái)項(xiàng)目)File(文件)-New(新建)-Files(文件)-C+sourcefiles步驟2:將下列代碼鍵入。步驟3:編譯生成exe文件。,/prochandle項(xiàng)目#include#include/確定自己的優(yōu)先權(quán)的簡單應(yīng)用程序voidmain(

9、)/從當(dāng)前進(jìn)程中提取句柄HANDLEhProcessThis=:GetCurrentProcess();/請求內(nèi)核提供該進(jìn)程所屬的優(yōu)先權(quán)類DWORDdwPriority=:GetPriorityClass(hProcessThis);,/發(fā)出消息,為用戶描述該類std:cout”;break;std:coutstd:endl;,上述代碼列出的是一種獲得進(jìn)程句柄的方法。對于進(jìn)程句柄可進(jìn)行的惟一有用的操作是在API調(diào)用時(shí),將其作為參數(shù)傳送給系統(tǒng)。系統(tǒng)向進(jìn)程對象內(nèi)“窺視”,以決定其優(yōu)先級(jí),然后將此優(yōu)先級(jí)返回給應(yīng)用程序。OpenProcess()和CreateProcess()API函數(shù)也可以用于提取

10、進(jìn)程句柄。前者提取的是已經(jīng)存在的進(jìn)程的句柄,而后者創(chuàng)建一個(gè)新進(jìn)程,并將其句柄提供出來。,4、利用句柄查出進(jìn)程的詳細(xì)信息步驟1:啟動(dòng)VisualC+6.0。File(文件)-New(新建)-Project(項(xiàng)目)-Win32consoleApplication(Win32控制臺(tái)項(xiàng)目)File(文件)-New(新建)-Files(文件)-C+sourcefiles步驟2:將下列代碼鍵入。步驟3:編譯生成exe文件。步驟4:按下Ctrl+Alt+Del啟動(dòng)任務(wù)管理器,查看進(jìn)程相關(guān)的相關(guān)信息,與上述運(yùn)行結(jié)果有何不同。,/proclist項(xiàng)目#include#include#include/當(dāng)在用戶模式

11、機(jī)內(nèi)核模式下都提供所耗時(shí)間時(shí),在內(nèi)核模式下進(jìn)行所耗時(shí)間的64位計(jì)算的幫助方法DWORDGetKernelModePercentage(constFILETIME,/將消耗時(shí)間相加,然后計(jì)算消耗在內(nèi)核模式下的時(shí)間百分比ULONGLONGqwTotal=qwKernel+qwUser;DWORDdwPct=(DWORD)(ULONGLONG)100*qwKernel)/qwTotal);return(dwPct);/以下是將當(dāng)前運(yùn)行進(jìn)程名和消耗在內(nèi)核模式下的時(shí)間百分?jǐn)?shù)都顯示出來的應(yīng)用程序voidmain()/對當(dāng)前系統(tǒng)中運(yùn)行的進(jìn)程拍取“快照”HANDLEhSnapshot=:CreateToolh

12、elp32Snapshot(TH32CS_SNAPPROCESS,/提取當(dāng)前進(jìn)程0);/如果是當(dāng)前進(jìn)程,就將其忽略/初始化進(jìn)程入口PROCESSENTRY32pe;:ZeroMemory(,/按所有進(jìn)程循環(huán)BOOLbMore=:Process32First(hSnapshot,/在用戶模式下消耗的時(shí)間,/計(jì)算內(nèi)核模式消耗的時(shí)間百分比DWORDdwPctKernel=:GetKernelModePercentage(ftKernelMode,/在內(nèi)核模式上消耗的時(shí)間ftUserMode);/在用戶模式下消耗的時(shí)間/向用戶顯示進(jìn)程的某些信息std:cout“ProcessID:”pe.th32ProcessID“,EXEfile:”pe.szExeFile“,%inkernelmode:”dwPctKernelstd:endl;/消除句柄:CloseHandle(hProcess);/轉(zhuǎn)向下一個(gè)進(jìn)程bMore=:Process32Next(hSnapshot,上述代碼首先利用Windows2000的工具幫助庫來獲得當(dāng)前運(yùn)行的所有進(jìn)程的快照。然后應(yīng)用程序進(jìn)入快照中的每一個(gè)進(jìn)程,得到其以PROCESSENTRY32結(jié)構(gòu)表示的屬性。

溫馨提示

  • 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)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論