Windows實驗報告

2021-09-19 11:46:23 字數 3628 閱讀 9613

華北電力大學

實驗報告||

實驗名稱驗證性試驗、設計性試驗

課程名稱 windows體系及程式設計 ||

專業班級: 計科0803學生姓名:董世令

學號:200809010302 成績:

指導教師:王新穎實驗日期:2011.4.8

程序管理實驗

一、實驗目的

理解windows程式設計環境下的程序管理機制,能建立乙個完成特定功能的程序,並能對程序進行資訊的獲取、終止和保護。

二、實驗要求

1. 編寫一段程式,能夠完成建立程序的功能,要求啟動windows記事本程式(notepad.exe),同時開啟乙個文字檔案,路徑為:

c:\system\user.log 。

並列印出新建程序id。

2. 獲取當前系統程序資訊,列印輸出程序名稱和id號。

3. 終止新建立的程序並獲取退出**。

三、實驗原理

(1)程序的建立

程序的建立通過createprocess()函式來實現,createprocess()通過建立乙個新的程序及在其位址空間內執行的主線程來啟動並執行乙個新的程式。具體地,在執行createprocess()函式時,首先由作業系統負責建立乙個程序核心物件,初始化計數為1,並立即為新程序建立一塊虛擬位址空間。隨後將可執行檔案或其他任何必要的動態鏈結庫檔案的**和資料裝載到該位址空間中。

在建立主線程時,也是首先由系統負責建立乙個執行緒核心物件,並初始化為1。最後啟動主線程並執行程序的入口函式winmain(),完成對程序和執行執行緒的建立。

createprocess()函式的原型宣告如下:

bool createprocess(

lpctstr lpapplicationname可執行模組名

lptstr lpcommandline命令列字串

lpsecurity_attributes lpprocessattributes程序的安全屬性

lpsecurity_attributes lpthreadattributes執行緒的安全屬性

bool binherithandles控制代碼繼承標誌

dword dwcreationflags建立標誌

lpvoid lpenvironment指向新的環境塊的指標

lpctstr lpcurrentdirectory指向當前目錄名的指標

lpstartupinfo lpstartupinfo指向啟動資訊結構的指標

lpprocess_information lpprocessinformation // 指向程序資訊結構的指標

);(2)程序的獲取

程序的定義是為執行程式指令的執行緒而保留的一系列資源的集合。程序是乙個可執行的程式,由私有虛擬位址空間、**、資料和其他作業系統資源(如程序建立的檔案、管道、同步物件等)組成。程序是一些所有權的集合,乙個程序擁有記憶體、cpu執行時間等一系列資源,為執行緒的執行提供乙個環境,每個程序都有它自己的位址空間和動態分配的記憶體、執行緒、檔案和其他一些模組。

系統快照的獲取可以通過win32 api函式createtoolhelp32snapshot()來完成,通過該函式不僅可以獲取程序的快照,同樣可以獲取堆、模組和執行緒的系統快照。函式的宣告如下:

handle winapi createtoolhelp32snapshot(

dword dwflags指定要建立包含哪一類系統資訊的快照函式

dword th32processid指定程序的id號,當設定為0時表示指定當前程序

);一旦系統得到系統快照控制代碼,就可以對當前的標識號進行列舉,程序號通過函式process32first()和procee32next()得到,這兩個函式可以用於獲取系統快照中第乙個和下乙個系統的資訊,這兩個函式的宣告如下:

bool winapi process32first(

handle hsnapshot系統快照控制代碼

lpprocessentry32 lppe指向結構體processentry32的指標

);bool winapi process32next(

handle hsnapshot系統快照控制代碼

lpprocessentry32 lppe指向結構體processentry32的指標

);(3)程序的終止

終止程序也就是結束程序,讓程序從記憶體中解除安裝。程序的終止的原因一般有4種。

1) 主線程的入口函式返回。

2) 程序中的乙個執行緒呼叫exitprocess函式。

3) 次程序中的所有執行緒結束。

4) 其他程序中又有執行緒都結束。

要結束當前程序一般讓主線程的入口函式返回。當使用者的程式入口函式返回的時候,啟動函式會呼叫c/c++執行期退出函式exit,並將使用者的返回值傳遞給它。exti函式會銷毀所有全域性的或靜態的c++物件,然後呼叫系統函式exitprocess促使作業系統終止應用程式。

exitprocess是乙個api函式,它會結束當前應用程式的執行,並設定退出**,函式宣告如下:

void exitprocess(uint uexitcode); //引數uexitcode為此程式的退出**

四、實驗所需儀器、裝置、材料(試劑)

windows作業系統,microsoft visual c++6.0或.net環境,msdn幫助文件。

5、實驗正文

#include "stdafx.h"

#include

#include

#include // 宣告快照函式的標頭檔案

bool terminateprocessfromid(dword dwid)

return bret;

}int main(int argc, char* ar**)

; process_information pi;

si.dwflags = startf_useshowwindow; // 指定wshowwindow成員有效

si.wshowwindow = true此成員設為true的話則顯示新建程序的主視窗,

為false的話則不顯示

bool bret = ::createprocess (

null不在此指定可執行檔案的檔名

szcommandline命令列引數

null預設程序安全性

null預設執行緒安全性

false指定當前程序內的控制代碼不可以被子程序繼承

create_new_console, // 為新程序建立乙個新的控制台視窗

null使用本程序的環境變數

null使用本程序的驅動器和目錄

&si,

&pi);

if(bret)

processentry32 pe32; // 在使用這個結構之前,先設定它的大小

pe32.dwsize = sizeof(pe32給系統內的所有程序拍乙個快照

handle hprocesssnap = ::createtoolhelp32snapshot(th32cs_snapprocess, 0);

if(hprocesssnap == invalid_handle_value)

bool bmore = ::process32first(hprocesssnap, &pe32);// 遍歷快照,輪流顯示每個程序的資訊

while(bmore)

// 不要忘記清除掉snapshot物件

實驗報告電路實驗報告要求

三一文庫 報告范文 實驗報告 電路實驗報告要求 同學您好 電路實驗課已經結束,請按題目要求認真完成實驗報告,並要仔細檢查一遍,以免退回,具體要求如下 一 繪製電路圖要工整 選取合適比例,元件引數標註要準確 完整。二 計算題要有計算步驟 解題過程,要代具體資料進行計算,不能只寫得數。三 實驗中測試得到...

實驗報告 高中化學實驗報告

1 1 稱取4gnaoh,5.85gnacl 2 用量筒量取適量蒸餾水 3 置於燒杯中攪拌溶解冷卻 4 用玻璃棒將液體引流到1l的容量瓶中 5 再用蒸餾水洗燒杯,再引流到容量瓶中 6 用膠頭滴管定容 7 蓋上容量瓶蓋子,上下搖晃,混合均勻即可2 1 驗漏 2 用標準液和待測液潤洗滴定管 3 取高錳酸...

數學實驗實驗報告

天水師範學院數學與統計學院 實驗報告 實驗專案名稱 所屬課程名稱 實驗型別線性代數實驗 實驗日期 班級學號 姓名成績 附錄1 源程式 附錄2 實驗報告填寫說明 1 實驗專案名稱 要求與實驗教學大綱一致。2 實驗目的 目的要明確,要抓住重點,符合實驗教學大綱要求。3 實驗原理 簡要說明本實驗專案所涉及...