進程是正在執行程式的實例,是作業系統分配資源的基本單位。每個進程擁有:
| 類型 | 全稱 | 連結器參數 | 進入點函式 | 典型範例 |
|---|---|---|---|---|
| GUI | Graphical User Interface | /SUBSYSTEM:WINDOWS | _tWinMain (或 wWinMain) | 記事本、計算機、Office 應用 |
| CUI | Character User Interface | /SUBSYSTEM:CONSOLE | _tmain (或 wmain) | cmd.exe、ping、netsh、編譯器 |
作業系統依據 PE 標頭中的 Subsystem 值決定載入哪個子系統(csrss.exe 管理主控台,win32k.sys 管理圖形),並建立對應的進程環境。
CreateProcess / CreateProcessAsUser。ntdll.dll, kernel32.dll 等)。_tWinMain 或 _tmain(經 CRT 初始化後)。GetMessage/DispatchMessage);CUI 程式直接執行邏輯並退出。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 實戰觀察。
XP、Vista、Windows 7 核心差異速查:Jump List、Aero Peek、HomeGroup、Device Stage、DirectX 11、觸控
Win2000/XP 藍屏代碼深度解讀:停止信息結構、錯誤符號、調試轉儲分析
Windows XP 專業版「以其他使用者身分執行」:不登出直接用管理員權限跑單一程式
實戰:MacBook 上用 Boot Camp 實現 Mac OS X 與 Windows XP/Vista 共存
善用 Windows 群組原理解除登錄鎖定,修復惡意網頁竄改首頁