《Windows核心編程》讀書筆記——進程篇

來源:互聯網
上載者:User

第4章 進程:

1. 一般將進程定義成一個正在啟動並執行程式的一個執行個體,它由以下兩部分構成。

      一個核心對象,作業系統用它來管理進程。核心對象也是系統儲存進程統計資訊的地方。

      一個地址空間,其中包含所有可執行檔或DLL模組的代碼和資料。

2. 每個進程至少要有一個線程來執行進程地址空間包含的代碼。如果沒有線程要執行進程地址空間包含的代碼,進程就失去了繼續存在的理由,系統會自動銷毀進程及其地址空間。

3. 在VS開發過程中通過連結器開關/SUBSYSTEM:CONSOLE或/SUBSYSTEM:WINDOWS設定是載入應用台程式還是視窗。

4. windows應用程式的進入點函數有四種(是否載入應用台程式,是否使用Unicode,兩個2維選項組成四種組合)。分別是:

      _tWinMain(WinMain),嵌入可執行檔的啟動函數是 WinMainCRTStartup

      _tWinMain(wWinMain),嵌入可執行檔的啟動函數是 wWinMainCRTStartup

      _tmain(Main),嵌入可執行檔的啟動函數是 mainCRTStartup

      _tmain(Wmain),嵌入可執行檔的啟動函數是 wmainCRTStartup

連結時根據上面連結器開關選擇應的入口函數來做連結。

5. 上述啟動函數的源碼在crtexe.c檔案中,主要的用途總結如下:

      擷取指向新進程的完整命令列的一個指標。

      擷取指向新進程的環境變數的一個指標。

      初始化C/C++運行庫的合璧變數。如果包含了StdLib.h,我們的代碼就可以訪問這些變數。

      初始化C運行庫記憶體配置函數(malloc,alloc)和其他底層I/O常式使用的堆(heap)。

      調用所有全域和靜態C++類對象的建構函式。

     

      完成以上的初始化工作以後就調用應用程式的進入點函數。

6. 提到記憶體泄露的檢測方法,已經轉載文章在本部落格中。

7. 進程執行個體控制代碼的擷取和使用:GetModuleHandle, GetModuleHandlerEx,GetModuleFileName

8. 進程命令列的擷取:GetCommandLine,CommandLineToArgvW

9. 進程環境變數:GetEnvironmentStrings,FreeEnvironmentStrings,GetEnvironmentVariable,SetEnvironmentVariable

10. 進程相關路徑的函數:GetCurrentDirectory, GetFullPathName

11. 建立進程函數CreateProcess,本章最重要的函數。它的運行機理:

      a. 系統建立一個進程核心對象;

      b. 系統為進程建立一個虛擬位址空間,載入可執行檔的代碼及資料到這個虛擬位址空間;

      c. 系統為新進程的主線程建立一個線程核心對象;

      d. 主線程執行C/C++運行時的啟動常式,執行應用程式入口;

      e. 如果建立新進程和主線程成功,返回TRUE。

      參數及說明請參考:http://social.msdn.microsoft.com/search/en-us/windows/desktop?query=CreateProcess&Refinement=181

      參數的使用是本章的關鍵。

12. 終止進程函數 ExitProcess,是不安全的函數,不要在程式中調用。其過程可以使用建構函式和解構函式列印是否調用來證明。

13. 終止進程函數 TerminateProcess,是安全函數,可以使用。

14. 子進程在建立時擁有父進程的ID,但如果父進程終止了,此ID就沒意義了,所以如果沒有同步訊號表明父進程沒有結束,不要使用這個ID來做事情。

15. 管理員以標準使用者權限運行時:這些內容是windows vista及win7的新增內容,也是相對獨立而重要的,另開一篇總結。

      書上得來終覺淺,緣知此事要躬行。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.