Process Monitor 学习笔记(5.15):三大经典实战(文件被占用 / 启动慢 / 权限失败)与标准排错流程
Process Monitor 学习笔记(5.15):三大经典实战(文件被占用 / 启动慢 / 权限失败)与标准排错流程
- Process Monitor 学习笔记(5.15):三大经典实战(文件被占用 / 启动慢 / 权限失败)与标准排错流程
- 一、复现前 Checklist(10 秒过一遍)
- 二、通用过滤与高亮模板
- 三、实战一:**文件无法删除**(谁在锁我?)
- 四、实战二:**程序启动慢**(卡在哪一步?)
- 五、实战三:**安装/更新失败(权限问题)**
- 六、无人值守采集脚本模板(启动→复现→停止→导出)
- 七、判读“口令卡”(遇事先看它)
- 八、交付模板(一页说清楚)
- 结语
Process Monitor 学习笔记(5.15):三大经典实战(文件被占用 / 启动慢 / 权限失败)与标准排错流程
目标:把 Procmon 变成“现场问题定位器”。本文用三个最常见场景做演示,并给出可复用的采集与判读清单 + 自动化脚本模板。
一、复现前 Checklist(10 秒过一遍)
-
Ctrl+X
清屏,Ctrl+L
确认过滤规则只保留目标范围。 -
打开 Highlight:给
ACCESS DENIED / NAME NOT FOUND / SHARING VIOLATION
上色。 -
需要长时间追踪?启用:
- 工具栏 Drop Filtered Events(只保留过滤后可见事件)
- Backing Files(写入磁盘缓冲,防崩溃丢证据)
-
需要看调用栈?先配置符号再抓(Options → Configure Symbols)。
-
复现场景:
Ctrl+E
开→复现→Ctrl+E
关,立即保存 PML。
二、通用过滤与高亮模板
基础过滤(按需精简):
Process Name is <yourapp.exe> → Include
Result is SUCCESS → Exclude (排错期先去掉成功噪声)
Operation is IRP_MJ_* → Exclude (通常无需内核 I/O 细节可先关)
高亮建议:
ACCESS DENIED → 红色
NAME NOT FOUND → 橙色
SHARING VIOLATION → 紫色
Detail contains Reparse/Redirect → 黄色
小技巧:列最小集合 =
Time of Day / Process Name / PID / Operation / Path / Result / Detail / Duration(勾选)
三、实战一:文件无法删除(谁在锁我?)
症状:删除/覆盖/移动文件失败,提示“文件被占用”。
思路:看 CreateFile
+ 失败结果,反查占用进程与句柄来源。
步骤:
-
Ctrl+X
清屏 →Ctrl+E
开始捕获 → 执行“删除/覆盖”动作 →Ctrl+E
停。 -
过滤:
Operation is CreateFile → Include Path contains <目标文件或父目录> → Include Result is SHARING VIOLATION → Include
-
定位第一条失败事件,右键 Process Tree → 选中该进程 Include Subtree(它的子进程也纳入视野)。
-
同时查看上一段时间同路径的
CreateFile
/ReadFile
/WriteFile
:- 哪个进程先打开了该文件?
Detail
里是否带Desired Access: Read/Write, ShareMode: None
(不共享导致他人写入受阻)?
-
打开 Stack(需符号)判断占用来源(杀软/索引/云盘/预览器/缩略图生成器等)。
常见结论与建议:
- 预览器/索引服务以独占模式打开 → 关闭预览窗格或改共享模式。
- 云盘/备份客户端占用 → 暂停同步或排除该路径。
- 杀软实时监控 → 临时加入排除列表验证。
四、实战二:程序启动慢(卡在哪一步?)
症状:应用冷启动/首开明显变慢。
思路:增加 Duration
列,排序看“最慢操作”,再跟进调用栈与重解析。
步骤:
-
列设置勾选 Duration;
Ctrl+X
→Ctrl+E
→ 启动应用 → 就绪后Ctrl+E
停。 -
过滤:
Process Name is <yourapp.exe> → Include Operation is CreateFile/RegOpenKey/Load Image/TCP Connect → Include(先从这几类开始)
-
按 Duration 降序排序,重点关注:
- 远程路径(
\\server\share\...
)、重解析(Detail: Reparse
指向云盘/虚拟路径)、 - 缺失文件导致的反复
NAME NOT FOUND
(错误的搜索探测)、 - 注册表查询链路异常长(策略/COM 解析)。
- 远程路径(
-
若怀疑模块加载慢,关注
Load Image
(DLL/插件)与Detail
中的签名验证、路径重定向。 -
打开 Stack 定位慢点来自何库(网络组件、杀软、DLP、Hook、组策略扩展)。
常见结论与建议:
- 网络路径超时:改本地缓存或优化超时/离线策略。
- 云盘重解析:排除运行目录、禁用按需加载测试。
- 证书验证/下载:配置受信链或启用离线缓存。
- 组件探测“海量 NAME NOT FOUND”:裁剪探测列表或修正搜索路径。
五、实战三:安装/更新失败(权限问题)
症状:安装器报错或静默失败。
思路:抓 ACCESS DENIED
,看具体路径(文件/注册表)与目标配置单元(HKLM/HKCU)。
步骤:
-
Ctrl+X
→Ctrl+E
→ 运行安装/更新 → 失败瞬间Ctrl+E
。 -
过滤:
Result is ACCESS DENIED → Include Process Name is <installer.exe/msiexec.exe/yourapp.exe> → Include
-
看 Path:
- 文件:
C:\Program Files
、C:\Windows\System32
需要管理员; - 注册表:
HKLM\SOFTWARE\...
(系统级)通常需提升; Detail
里的Desired Access
显示需要的权限(SetValue/WriteDAC/TakeOwnership)。
- 文件:
-
Stack 查拦截(DLP/加固/EDR/Hook)。
-
交叉验证:管理员运行、策略/白名单/EDR 排除、重试。
常见结论与建议:
- 未提升写系统路径:以管理员重试/改安装目录至用户可写。
- 被安全软件拦截:走白名单流程。
- 注册表键权限被策略改写:修 ACL 或在部署前设定相应权限。
六、无人值守采集脚本模板(启动→复现→停止→导出)
思路:加载你预设好的
.PMC
配置(含过滤、高亮、列选择),把 PML 落到磁盘,结束后自动导出 CSV 以便共享分析。
:: 1) 预设
set TRACE_DIR=C:\Trace\Case1
if not exist "%TRACE_DIR%" mkdir "%TRACE_DIR%":: 2) 启动采集(最小化、静默、落盘)
procmon.exe ^/AcceptEula /Quiet /Minimized ^/BackingFile "%TRACE_DIR%\case1.pml" ^/LoadConfig "%TRACE_DIR%\case1.pmc"echo === 现在去复现问题,结束后按任意键 ===
pause:: 3) 停止采集
procmon.exe /Terminate:: 4) 导出 CSV(按当前过滤导出,可加 /SaveFilter)
procmon.exe ^/OpenLog "%TRACE_DIR%\case1.pml" ^/SaveAs "%TRACE_DIR%\case1.csv" ^/SaveFilter
提示:
.pmc
建议在 GUI 里调好再File → Export Configuration
保存;这样命令行即插即用。
七、判读“口令卡”(遇事先看它)
- 权限:
ACCESS DENIED
(红),看路径 + Desired Access,是否应提升/改 ACL/白名单。 - 被占用:
SHARING VIOLATION
(紫),锁定先打开者与ShareMode
。 - 路径错误:
NAME NOT FOUND
(橙)是否为错误探测/误配置/缺失依赖。 - 慢点:
Duration
排序 +Reparse/Redirect
(云盘/虚拟化)+Load Image
(插件)。 - 谁干的:Stack + 符号 = 源头库/驱动/Hook 名字。
八、交付模板(一页说清楚)
- 问题描述:时间、环境、现象(图)。
- 采集方法:Procmon 版本、过滤/高亮摘要、是否 Drop/Backing。
- 关键证据:截图(失败事件 + Detail + Stack),CSV Top N 慢操作表。
- 根因判定:一句话结论 + 证据编号。
- 修复建议:操作清单(临时/永久)。
- 复测结果:修复后同条件追踪对比图/表。
结语
把以上三类场景练成“肌肉记忆”,日常 80% 的桌面/应用疑难就能用 Procmon 快速拆解:
清屏 → 过滤 → 抓取 → 着色 → 排序/栈 → 证据导出。
下一篇,我们做一个端到端实战案例(含原始 PML → CSV → 汇报成稿的完整流水线)。