全域旗標 是 Windows 核心為除錯、診斷、效能分析預留的行為開關,儲存於登錄碼 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager 及映像檔標頭。Gflags.exe (Global Flags Editor) 為 Support Tools 提供的圖形/命令列雙模式工具,允許管理員啟用/停用核心除錯支援 (如頁面堆積、記憶體檢查、載入器斷點)、追蹤 API 呼叫、模擬低資源環境。本文完整解析 GUI 版介面架構、五大分類 30+ 旗標含義、命令列對應參數與實戰啟用流程。
gflags.exe) / CLI (gflags.exe /p ...) 功能對等。介面以彩色矩形框分組 (藍/粉紅/綠/紅/橢圓),對應功能領域:
| 分組 | 旗標名稱 (縮寫/CLI參數) | 中文意義 | 核心用途 |
|---|---|---|---|
| 除錯核心 | FLG_STOP_ON_EXCEPTION (SOE) | 例外發生時中斷進入除錯器 | 捕捉未處理例外、即時分析現場 |
| FLG_SHOW_LDR_SNAPS (SLS) | 顯示載入器快照 (DLL 載入/卸載) | 診斷 DLL 載入順序、遺失、版本衝突 | |
| FLG_DEBUG_INITIAL_COMMAND (DIC) | 啟動時自動執行除錯器命令 | 自動化除錯腳本注入 | |
| 記憶體管理 | FLG_HEAP_ENABLE_TAIL_CHECK (HTC) | 啟用堆疊尾部檢查 (緩衝區溢位偵測) | 偵測 Heap Overrun/Buffer Overflow |
| FLG_HEAP_ENABLE_FREE_CHECK (HFC) | 啟用釋放後檢查 (Use-After-Free 偵測) | 偵測 Double Free、Access Freed Memory | |
| FLG_HEAP_VALIDATE_PARAMETERS (HVP) | 驗證堆疊 API 參數合法性 | 捕捉傳遞錯誤控制碼/大小/旗標 | |
| FLG_HEAP_VALIDATE_ALL (HVA) | 每次堆疊操作前驗證整個堆疊完整性 | 深度堆疊損毀偵測 (效能影響大) | |
| FLG_APPLICATION_VERIFIER (AVF) | 啟用應用程式驗證器 (AppVerifier) 整合 | 配合 AppVerifier 進行全方位驗證 | |
| FLG_HEAP_ENABLE_TAGGING (HTG) | 啟用堆疊標記追蹤配置來源 | 記憶體洩漏來源定位 (配合 !heap -t) | |
| FLG_HEAP_ENABLE_TAG_BY_DLL (HTD) | 依 DLL 模組標記堆疊配置 | 定位特定 DLL 記憶體洩漏 | |
| FLG_POOL_ENABLE_TAGGING (PTG) | 啟用核心記憶體池標記 | 核心模式洩漏偵測 (需核心除錯器) | |
| FLG_POOL_ENABLE_TAG_BY_DLL (PTD) | 依驅動程式標記核心池配置 | 定位特定驅動記憶體洩漏 | |
| FLG_MAINTAIN_OBJECT_TYPELIST (OTL) | 維護物件類型清單 (物件管理器追蹤) | 核心物件建立/刪除審計 | |
| 程式除錯支援 | FLG_USER_STACK_TRACE_DB (UST) | 建立使用者模式堆疊追蹤資料庫 | 支援 !ustack、回溯 API 呼叫鏈 |
| FLG_KERNEL_STACK_TRACE_DB (KST) | 建立核心模式堆疊追蹤資料庫 | 核心呼叫鏈回溯 (需核心除錯器) | |
| FLG_ENABLE_CSRDEBUG (CSR) | 啟用 CSRSS 除錯支援 | Win32 子系統除錯 | |
| FLG_ENABLE_KDEBUG_SYMBOL_LOAD (KSL) | 啟用核心除錯器符號自動載入 | 加速核心除錯符號解析 | |
| FLG_DISABLE_PAGE_KERNEL_STACKS (DPK) | 停用核心堆疊分頁 (保持常駐記憶體) | 核心堆疊回溯完整性 (增加記憶體壓力) | |
| FLG_ENABLE_SYSTEM_CRIT_BREAKS (SCB) | 系統關鍵區段進入時中斷 | 死結/鎖競爭分析 | |
| 綜合/進階 | FLG_CREATE_PROCESS_DEBUG (CPD) | 建立進程時觸發除錯器 | 子進程除錯、注入點捕捉 |
| FLG_DEBUG_PROCESS_DEBUG (DPD) | 除錯進程時觸發除錯器 | 巢狀除錯支援 | |
| FLG_INHERIT_DEBUG_PROCESS (IDP) | 子進程繼承父進程除錯狀態 | 進程樹整體除錯 | |
| FLG_PROCESS_HEAP_CHECK (PHC) | 進程堆疊檢查 (啟動時驗證) | 早期堆疊損毀偵測 | |
| FLG_PROCESS_HEAP_VALIDATE (PHV) | 進程堆疊驗證 (定期驗證) | 運行期堆疊完整性 | |
| FLG_LOADER_TOP_DOWN (LTD) | 載入器自上而下配置記憶體 (高位址優先) | 模擬 ASLR/高位址相容性測試 | |
| FLG_ENABLE_HANDLE_EXCEPTIONS (EHE) | 啟用控制碼例外處理 | 無效控制碼轉為例外而非靜默失敗 | |
| FLG_DISABLE_PROTDLL_CHECK (DPC) | 停用受保護 DLL 檢查 (系統檔案保護) | 測試環境替換系統 DLL (極度謹慎) | |
| 追蹤深度 | Stack Trace Depth (預設 16) | 堆疊追蹤資料庫記錄幀數 | 增加可回溯深度 (消耗更多記憶體) |
| 核心池標記 | Pool Tag (文字/16進位) + 檢查模式 | 指定核心池標記進行針對性檢查 | 配合 !pool 指令鎖定洩漏驅動 |
MyApp.exe 存在 Heap Leak。gflags.exe → 目的地選「映像檔」 → 映像檔名輸入 C:\App\MyApp.exe → 命令列留白。MyApp.exe 重現洩漏場景。windbg -p PID → 執行 !heap -s 總覽 → !heap -t -stat 依標記統計 → 定位可疑標記 → !heap -p -a Address 回溯配置堆疊。
# 啟用系統全域旗標 (需重開機)
gflags /r +HTC +HFC +HTG # 啟用尾部檢查、釋放檢查、標記追蹤
gflags /r -HTC -HFC -HTG # 停用
# 啟用單一映像檔旗標 (需重開機)
gflags /p C:\App\MyApp.exe +HTC +HFC +HTG
gflags /p C:\App\MyApp.exe -HTC -HFC -HTG
# 查詢目前旗標狀態
gflags /r # 系統全域
gflags /p C:\App\MyApp.exe # 指定映像檔
# 核心池標記 (需核心除錯器)
gflags /k +PTG +PTD
gflags /k TagName=MyDrvTag
下一篇將深入解析 PageHeap (頁面堆疊)、Application Verifier、UST/KST 堆疊追蹤資料庫 進階技術,以及如何結合 WinDbg 進行「零程式碼修改」的生產環境記憶體/效能/死結診斷。
Windows 2000 Outlook Express 5.0 新功能總覽:多身分、Hotmail、離線同步、聯絡人窗格、強化規則、數位簽章、IMAP 草稿
Windows Server 2003 週年慶銷售亮眼:SP1 整合 XP SP2 安全特性、64 位元版本佈局、R2 更新版規劃與 Longhorn Server 展望
Windows 2000 Active Directory 備份與還原完整指南:系統狀態資料、權威/非權威還原
Windows Server 2003 登入密碼獲取技術分析與記憶體提取方法
Windows 2000 虛擬主機 IIS 安全鎖死 10 大關鍵設定
Active Directory 整合 DNS 常見問題與解決方案問答集