WinDbg 記憶體與控制代碼診斷:用 !poolused、!handle、!vm 揪出洩漏元兇
電腦跑越久越慢、開機三天後什麼都開不起來,這不是玄學,是核心資源洩漏。多數教學只教你跑 `!analyze -v`,但洩漏型問題在當機那一刻看到的只是二次症狀。本文把 WinDbg 記憶體洩漏診斷拆成四步:`!vm` 先分池、`!poolused` 排出兇手、`!handle` 追控制代碼、Driver Verifier 抓現行犯。
電腦跑越久越慢、開機三天後什麼都開不起來,這不是玄學,是核心資源洩漏。多數教學只教你跑 `!analyze -v`,但洩漏型問題在當機那一刻看到的只是二次症狀。本文把 WinDbg 記憶體洩漏診斷拆成四步:`!vm` 先分池、`!poolused` 排出兇手、`!handle` 追控制代碼、Driver Verifier 抓現行犯。
打開 regedit 看到的那棵樹,其實是多個獨立資料庫檔拼出來的。本文依微軟官方文件拆解登錄檔實體結構:HKLM 各分支分別對應一個 hive 檔、HARDWARE 是完全不落地的揮發性 hive、HKCU 掛的是使用者資料夾裡的 NTUSER.DAT,而 SYSTEM 比核心還早載入。另附唯讀指令列出全部已掛載 hive。
程式卡死或閃退的當下,工作管理員只給你一句「沒有回應」,現場一重開就消失。這篇用微軟官方 ProcDump v12.01,教你分辨「當機」與「沒回應」該用 `-e` 還是 `-h`、四種傾印類型該怎麼選,再把 `.dmp` 丟進 WinDbg 分析,並補上事後除錯器註冊與解除、線上服務降低中斷的參數,以及把傾印檔交給第三方前必須知道的隱私紅線。
檔案刪不掉、跳出「正在另一個程式中開啟」,工作管理員永遠給不了答案。這篇用官方 Process Explorer v17.13,教你用 Find Handle or DLL 反查鎖住檔案的行程,再切到 DLL 檢視、搭配簽章與 VirusTotal 揪出可疑 DLL,並補上命令列 Handle 與 ListDLLs 的批次用法、關閉 handle 的官方風險警告,以及提交檔案前必知的隱私紅線。
遠端桌面跳「發生驗證錯誤」不是只能關 NLA 了事。這篇把 NLA 失敗拆成帳號、CredSSP 認證、網路層三層,先教你用一段唯讀的 WMI 查詢與事件 6041 分辨自己踩到哪一層,再對症下藥。內含官方加密 Oracle 補救三檔設定對照、Remote Desktop Users 權限指派檢查、以及 PolicySource 欄位的判讀法,最後附完整回退步驟與停止條件。
檔案總管閃退、桌面圖示整批消失再重畫、按右鍵就沒回應,其實都是同一件事:殼層處理程序當掉了。這篇從架構講起,說明為什麼第三方右鍵選單與縮圖處理常式能把整個桌面弄垮,再帶你用事件檢視器抓出出錯模組名稱、用官方工具做二分法隔離,最後附上降低耦合的長期設定與四種翻車情境的回退步驟。
WMI 壞掉的症狀很少寫在臉上:監控軟體離線、`gpresult` 失敗、明明存在的類別被回報找不到,底下都可能是 Repository 損毀。這篇照微軟官方文件與支援團隊封存文章把修復順序拆清楚——先備份、再用 `winmgmt /verifyrepository` 驗證,確認不一致才 `/salvagerepository` 併修,`/resetrepository` 留到最後,並附完整回退步驟。
藍屏跳 DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS(0xCE)先別急著換記憶體。官方成因寫在軟體層:驅動卸載前沒取消 lookaside list、DPC 與工作執行緒,等系統回頭呼叫,那段程式碼已經不在了。本文教你從傾印的已卸載模組清單反推嫌疑驅動,再用 Driver Verifier 標準設定逮現行犯。
藍屏跳 MULTIPLE_IRP_COMPLETE_REQUESTS(0x44)先別急著換記憶體。官方講得很清楚:這是某支驅動要求完成一個已經完成的 IRP,而最常見的情況是兩支驅動都以為自己擁有這個封包。本文說明為什麼 !analyze -v 指的模組在這顆碼上特別容易抓錯人,教你用 !irp 攤開封包反推 device stack,再用 Driver Verifier 的 I/O 驗證把違規當場逮住。
電腦卡住不動、滑鼠會動卻點不了,這種 hang 不會留下 minidump,`!analyze -v` 也給不出答案。本文依微軟官方文件走三段路徑:先用鍵盤強制當機造一份核心傾印,再用 `!process 0 17` 列出全系統執行緒與等待狀態,接著用 `!thread` 鎖定可疑執行緒、`!irp` 追出停在 pending 的 I/O 請求與驅動名稱。