Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Windows 進程與應用程式架構深度解析

編輯:Windows XP 系統介紹

核心概念:什麼是進程?

進程是正在執行程式的實例,是作業系統分配資源的基本單位。每個進程擁有:

  • 獨立虛擬位址空間:包含可執行檔碼碼、DLL 模組、動態記憶體配置、執行緒堆疊與堆積。
  • 核心物件:系統用於管理進程的資料結構,記錄統計資訊(PID、優先權、存取權杖等)。
  • 一或多個執行緒:CPU 排程的實際執行單元,共享進程的位址空間與資源。

Windows 應用程式兩大子系統

類型全稱連結器參數進入點函式典型範例
GUIGraphical User Interface/SUBSYSTEM:WINDOWS_tWinMain (或 wWinMain)記事本、計算機、Office 應用
CUICharacter User Interface/SUBSYSTEM:CONSOLE_tmain (或 wmain)cmd.exe、ping、netsh、編譯器

作業系統依據 PE 標頭中的 Subsystem 值決定載入哪個子系統(csrss.exe 管理主控台,win32k.sys 管理圖形),並建立對應的進程環境。

進程建立與執行流程

  1. 使用者雙擊 EXE / 命令列輸入指令 → CreateProcess / CreateProcessAsUser。
  2. 載入器解析 PE 標頭,讀取 Subsystem、Entry Point、DLL 相依性。
  3. 配置虛擬位址空間,映射映像檔與系統 DLL (ntdll.dll, kernel32.dll 等)。
  4. 建立主執行緒,進入點為 _tWinMain 或 _tmain(經 CRT 初始化後)。
  5. GUI 程式進入訊息迴圈 (GetMessage/DispatchMessage);CUI 程式直接執行邏輯並退出。

關鍵資料結構:STARTUPINFO

typedef struct _STARTUPINFO {
  DWORD  cb;
  LPTSTR lpReserved;
  LPTSTR lpDesktop;      // 指定窗口站與桌面,如 "WinSta0\\Default"
  LPTSTR lpTitle;        // 主控台標題
  DWORD  dwX, dwY;       // 視窗初始位置
  DWORD  dwXSize, dwYSize;
  DWORD  dwXCountChars, dwYCountChars;
  DWORD  dwFillAttribute;
  DWORD  dwFlags;        // STARTF_USESHOWWINDOW 等
  WORD   wShowWindow;    // SW_SHOWDEFAULT 等
  WORD   cbReserved2;
  LPBYTE lpReserved2;
  HANDLE hStdInput;      // 標準輸入/輸出/錯誤重導向
  HANDLE hStdOutput;
  HANDLE hStdError;
} STARTUPINFO, *LPSTARTUPINFO;

lpDesktop 為 NULL 時繼承父進程的窗口站與桌面;指定空字串則建立新的不可見窗口站與桌面(常用於服務程式隔離)。

實用偵錯技巧

  • 查看進程命令列:工作管理員 → 詳細資料 → 右鍵欄位 → 勾選「命令列」。
  • 列出進程載入模組:tasklist /m /fi "imagename eq notepad.exe" 或 Process Explorer (Ctrl+D)。
  • 偵錯服務進程:windbg -p PID 或 VS「偵錯 → 附加至處理程序」。
  • 檢視啟動參數:wmic process where processid=PID get CommandLine。

總結

理解進程隔離、子系統差異、啟動參數與執行緒模型,是 Windows 系統程式開發、逆向分析、效能調優與故障診斷的基石。建議搭配 Process Explorer、Process Monitor、Windows Performance Analyzer 實戰觀察。

Copyright © Windows教程網 All Rights Reserved