第四章 程序

2021-08-03 22:03:30 字數 2298 閱讀 1990

程序由兩部分組成:

載入到程序位址空間的每個可執行檔案或dll檔案均被賦予乙個獨一無二的示例控制代碼。可執行檔案的示例控制代碼作為winmain的第乙個引數hinstexe來傳遞。載入資源的函式都需要該控制代碼的值。

hicon loadicon( hinstance hinst, pctstr pszicon);
第乙個引數指明哪個檔案(可執行檔案或d l l 檔案)包含你想載入的資源。

bool createprocess(

ptstr pszcommandline,

psecurity_attributes psaprocess,

psecurity_attributes psathread,

bool binherithandles,

dword fdwcreate,

pvoid pvenvironment,

pctstr pszcurdir,

pstartupinfo psistartinfo,

pprocess_information ppiprocinfo);

當乙個執行緒呼叫該函式時,會為新建立的程序建立乙個核心物件,初始使用計數是1,核心物件可理解為一種較小的資料結構。然後為新程序建立乙個虛擬位址空間,並將可執行檔案或dll檔案的**和資料載入到該程序的位址空間中。

然後系統為新程序建立乙個執行緒核心物件(使其計數為1),主線程便開始執行,最終呼叫wi n m a i n 、w wi n m a i n 、m a i n 或w m a i n 函式。如成功則返回true。

pszcommandline型別是ptstr,所以不能是唯讀變數,系統在函式返回之前會還原pszcommandline中的資料

startupinfo si = ;

process_information pi;

tchar szcommandline = text("notepad");

createprocess(null,szcommandline,null,null,

false,0,null,null,&si,&pi);

如果szcommandline的第乙個標記(檔名)沒有副檔名,則認為副檔名是.exe,如果沒有制定路徑,則按照下面的順序在目錄中搜尋:

1) 包含呼叫程序的. e x e 檔案的目錄。

2) 呼叫程序的當前目錄。

3) wi n d o w s 的系統目錄。

4) wi n d o w s 目錄。

5) pat h 環境變數中列出的目錄。

因為是父程序建立的子程序,所以父程序可以操作子程序的程序物件控制代碼和執行緒物件控制代碼。(也就相當於子程序的程序控制代碼和執行緒控制代碼就在父程序當中,父程序再次建立的其他子程序也可以繼承第一次建立的子程序的程序和執行緒控制代碼。)

舉例來說明這3個引數的用法:

processa建立processb,然後processa再建立processc。

a呼叫createprocess建立b(此時a可以操作b程序和執行緒物件),psaprocess.binherithandles設定為true,psathread.binherithandles設定為false,代表b的程序物件在a中是可繼承的,執行緒物件在a中是不可以繼承的。

a呼叫createprocess建立c(此時a可以操作c程序和執行緒物件), createprocess的引數binherithandles設定為true,代表c繼承了a中的可繼承控制代碼(包含b中可繼承控制代碼即b的程序控制代碼)。

規定如何建立新程序,支援幾個特定的引數。

設定子程序的啟動資訊,一般都使用預設,但有一點要注意,使用預設值時,必須初始化為0,就像這樣:

startupinfo si = ;

createprocess(...,&si,...);

如果不初始化為0,有時就不會建立程序。

它的成員可以用來設定一些啟動的資訊,例如程式啟動後的顯示方式,程式啟動後視窗的座標等等。

子程序可以呼叫函式來獲得由父程序建立的該結構的拷貝,來做出響應。

typedef struct _process_information

process_information;

createprocess返回之前會開啟程序物件和執行緒物件,並把程序控制代碼和執行緒控制代碼儲存在hprocess和hthread中,此時這兩個物件的使用計數都會加1。(是告訴系統:我要使用這兩個核心物件,你不要刪除它。)

這意味著在系統能夠釋放程序物件前,該程序必須終止執行(將使用計數遞減為1),並且父程序必須呼叫closehandle(再將使用計數遞減1,使之變為0)。

第四章 程序(1)

程序一a 程序通常被定義為乙個正在執行的程式的例項,它由兩個部分組成 os用來管理程序的核心物件 核心物件也是系統用來存放關於程序的統計資訊的地方 位址空間 它包含所有可執行模組或 dll模組的 和資料 它還包含動態記憶體分配的空間 當建立乙個程序時,系統會自動建立它的第乙個執行緒,稱為主線程。然後...

windows核心程式設計 第四章 程序

獲得當前目錄 dword getfullpathname pctstr pszfile,dword cchpath,ptstr pszpath,ptstr ppszfilepart 獲取c盤的當前目錄 tchar szcurdir max path getfullpathname c max pat...

第四章 程序(4)程序的錯誤模式

4 程序的錯誤模式 與每個程序相關聯的是一組標誌,用於告訴系統,程序對嚴重的錯誤應該如何作出反映,這包括磁碟介質故障 未處理的異常情況 檔案查詢失敗和資料沒有對齊等。程序可以告訴系統如何處理每一種錯誤。方法是呼叫 seterrormode 函式 uint seterrormode uint fuer...