个人主页杨利杰YJlio❄️个人专栏《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》《微信助手》 《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》让复杂的事情更简单让重复的工作自动化《Windows Sysinternals实战指南》5.13 Process Monitor 学习笔记从 0 到 1 的排障剧本清单可复用模板1. 为什么需要一份 Procmon 排障剧本2. 开始前 60 秒先把取证现场搭好2.1 准备项清单2.2 推荐工作目录2.3 符号路径建议3. 通用采集模板清屏、开始、复现、立停3.1 四步循环3.2 远程协助时的话术3.3 最小可用采集流程图4. 通用过滤与高亮先收口再看异常4.1 最小三件套过滤4.2 父子进程复杂时用 Process Tree4.3 高亮模板5. 事件类别开关只开当前问题需要的6. 长跑与体积控制不要把磁盘打爆6.1 长跑三件套6.2 推荐长跑策略6.3 PowerShell 轮转示例7. 八大常见场景排障剧本7.1 程序启动失败或闪退7.2 安装或更新卡住7.3 文件被占用或无法覆盖7.4 配置不生效或读写错目录7.5 网络访问失败7.6 CPU 异常或卡顿7.7 登录、注销或关机慢7.8 打印异常8. 分析顺序Summary、Count、Detail、Stack8.1 先看 Summary8.2 再看 Count Occurrences8.3 最后看 Detail 和 Stack9. 证据打包清单让别人能复盘你的结论9.1 标准证据包9.2 README 应该写什么10. 常见误判与反模式10.1 NAME NOT FOUND 不一定是错误10.2 SUCCESS 也可能是性能问题11. 可直接复制的过滤与高亮片段11.1 只看目标进程异常11.2 定位文件被占用或拒绝访问11.3 定位路径或配置缺失11.4 PMARK 语义锚点11.5 慢调用分析12. 总结把 Procmon 用成剧本化证据机器1. 为什么需要一份 Procmon 排障剧本前面 5.1 到 5.12 已经把 Process Monitor 的主要能力拆开讲了一遍事件模型、过滤、高亮、Process Tree、PML 保存、Boot Logging、长时间追踪、配置导入导出、命令行自动化、分析工具、自定义 PMARK 标记和工具栏使用。到这一篇就不能再继续停留在“功能介绍”层面了。真实排障现场不会按章节顺序出题。用户不会说“请你现在使用 File Summary 分析一下 CreateFile 的 Result”。用户只会说软件打不开、安装失败、开机慢、关机慢、文件删不掉、Outlook 加载项消失、打印异常、某个程序启动要转圈十几秒。这时你需要的不是再背一遍 Procmon 按钮而是一份可以直接照着执行的剧本先准备什么、怎么采集、怎么过滤、看哪些字段、如何下结论、最后怎么交付给同事或用户。我的理解是Procmon 的熟练度不是会点多少菜单而是能不能把一个模糊现象压缩成“对象、时间线、异常点、证据和验证动作”。这张图对应本文核心从准备、采集、过滤、分析到交付把 Procmon 用成可复用的排障剧本而不是临场猜测。这一篇适合放在 Process Monitor 章节的收官位置。你可以把它当作一线桌面支持、二线系统工程师、应用支持工程师的速查模板。遇到问题时先不要急着判断根因先按剧本把证据拿到。2. 开始前 60 秒先把取证现场搭好Procmon 排障最容易犯的错误是一看到问题就立刻开始抓。这样看起来很积极但现场往往会变乱时间不对、路径没准备、权限不够、日志乱放、复现步骤没固定最后抓到一堆事件却没人能复盘。开始前先用 60 秒做准备质量会高很多。这个动作不复杂但很关键。2.1 准备项清单检查项推荐动作目的Procmon 版本使用较新版本减少功能差异和兼容问题运行权限管理员启动获取更完整的系统事件系统时间与其他日志时间对齐方便和事件查看器、应用日志对表工作目录建议C:\_trace\或D:\_trace\统一保存 PML、CSV、截图符号路径配置 Microsoft Symbol Server方便后续 Stack 分析目标对象明确进程名、路径、用户、复现动作避免全系统盲抓噪声预期记录 EDR、DLP、同步盘、网盘、代理后续判断第三方干扰不要忽略时间对齐。Procmon、事件查看器、应用日志、DebugView 如果时间对不上后面所有“因果判断”都会变弱。2.2 推荐工作目录C:\_trace\ ├─ pml\ ├─ csv\ ├─ screenshots\ ├─ configs\ └─ readme.txt工作目录的目的不是好看而是避免证据散落。一个 PML 文件放在桌面一个截图放在微信一个 CSV 放在下载目录这种交付方式后续没人能接。建议从一开始就按“证据包”思路管理 Procmon 文件而不是抓完以后再临时整理。2.3 符号路径建议如果后续需要看调用栈建议提前配置符号路径。否则 Stack 里可能只有地址或难以识别的模块名。srv*C:\Symbols*https://msdl.microsoft.com/download/symbols符号不是每次都必须但遇到 EDR、DLP、杀软、同步盘、插件、驱动过滤这类问题时Stack 往往能决定你是否能把结论从“怀疑”推进到“有证据支持”。3. 通用采集模板清屏、开始、复现、立停Procmon 的标准采集动作可以压缩成四步清屏、开始、复现、立停。简单但很多人做不到位。问题往往不是不会用工具而是抓取窗口没有控制住。3.1 四步循环1. Ctrl X 清屏 2. Ctrl E 开始捕获 3. 复现问题 4. Ctrl E 立刻停止这个动作的核心是让时间线干净。你要确保清屏之后发生的事件就是这次复现产生的。复现完成后立刻停止是为了冻结证据现场避免后台噪声继续刷进来。Procmon 不是越抓越好。短窗口、强复现、立刻停止往往比全系统跑十分钟更有价值。3.2 远程协助时的话术如果是远程协助用户复现可以直接这样说我现在需要抓取一次问题复现窗口的系统访问日志。 请先不要操作目标软件。 我会先清空当前事件然后开始捕获。 开始后你再复现一次问题。 复现完成后请不要继续乱点我会立刻暂停并保存日志。这段话的重点是控制用户动作。远程排障时用户提前点、重复点、复现后继续操作都会污染时间线。现场排障不是让用户随便复现而是让用户按你的取证节奏复现。3.3 最小可用采集流程图确认目标进程和复现动作配置基础过滤CtrlX 清屏CtrlE 开始捕获用户复现问题CtrlE 立刻停止保存 PML开始分析4. 通用过滤与高亮先收口再看异常抓到日志以后不要立刻逐行翻。先用过滤器把范围收小再用高亮把异常拉出来。过滤器负责减少事件量高亮负责提高可读性两者作用不同。4.1 最小三件套过滤绝大多数应用类问题可以先从下面三条开始。Process Name is yourapp.exe → Include Result is SUCCESS → Exclude Operation is ReadFile → Exclude 视情况启用这里要注意Result is SUCCESS → Exclude 不适合所有问题。如果你排查的是权限、路径缺失、文件占用这条很有用但如果你排查的是启动慢、卡顿、高 IO成功事件也可能是关键因为很多性能问题不是失败导致的而是大量成功但耗时高的操作叠加导致的。性能问题不要一上来排除 SUCCESS。慢调用经常是 SUCCESS。4.2 父子进程复杂时用 Process Tree如果目标程序会拉起子进程例如安装器、Office、浏览器、脚本、服务进程就不要只按一个进程名过滤。应该先打开 Process Tree找到父子链再 Include Subtree。Tools → Process Tree → 选中父进程 → Include Subtree进程链复杂时Process Tree 比手工写多个进程名更稳。4.3 高亮模板Result is ACCESS DENIED → 红色 Result is NAME NOT FOUND → 橙色 Result is SHARING VIOLATION → 紫色 Detail contains Reparse → 黄色 Path contains \PMARK\ → 蓝色 Duration 0.1s → 黄色高亮不要配太多。颜色一多界面就重新变成噪声。建议只标风险最大、最常见、最容易解释的几类。过滤是减法高亮是提示。先减法再提示。5. 事件类别开关只开当前问题需要的Procmon 可以显示 File System、Registry、Process Thread、Network、Profiling 等事件。新手常犯的错误是全部打开然后被事件洪水淹没。更合理的方式是只开当前问题需要的类别。问题类型推荐开启应用启动失败File System / Registry / Process Thread安装失败File System / Registry / Process Thread必要时 Network文件占用File System配置不生效File System / Registry网络连接异常Network File System / Registry高 CPU / 卡顿Profiling File System / Registry短时间抓登录 / 注销 / 关机慢Boot Logging File / Reg / Proc打印异常File System / Registry / Process ThreadProfiling 不建议默认长时间开启。它适合短窗口性能热点定位不适合无脑全天采集。对于企业桌面支持默认建议开启 File System、Registry、Process Thread。Network 和 Profiling 作为专项分析时再加。6. 长跑与体积控制不要把磁盘打爆短窗口问题用 CtrlX、CtrlE 就够了。但偶发卡顿、间歇性报错、全天高 IO、关机慢这类问题往往需要长时间采集。长跑采集的核心不是“抓得越多越好”而是控制边界。6.1 长跑三件套项目作用风险Drop Filtered Events丢弃过滤外事件显著减小日志过滤错了证据永远丢失Backing Files写入磁盘 PML适合长时间采集磁盘空间不足会引发新问题轮转切片按小时或时间段拆分 PML脚本和计划任务要提前验证Drop Filtered Events 不能一上来就开。必须先验证过滤器确实能保留目标事件。6.2 推荐长跑策略1. 先短时试跑 5 到 10 分钟 2. 检查事件量和 PML 增长速度 3. 收窄目标进程和路径 4. 再决定是否开启 Drop Filtered Events 5. Backing File 写入非系统盘 6. 按小时或班次轮转切片 7. 保留异常时间窗其余压缩或清理长跑时建议把日志放在非系统盘例如 D:\ProcmonLogs\。不要和数据库、虚拟机、编译缓存、用户 OneDrive 同步目录放在一起。长跑的目标不是全量占满磁盘而是保留异常时间窗前后的证据。6.3 PowerShell 轮转示例$pmC:\Tools\Sysinternals\procmon.exe$cfgD:\Procmon\Config\Longrun.pmc$dirD:\ProcmonLogsNew-Item-Force-ItemType Directory$dir|Out-Null1..8|ForEach-Object{$tsGet-Date-FormatyyyyMMdd_HHmmss$pmlJoin-Path$dirpm_$ts.pml$pm/AcceptEula/Quiet/Minimized/LoadConfig$cfg/BackingFile$pmlStart-Sleep-Seconds 1800 $pm/TerminateStart-Sleep-Seconds 5}注意不要直接照抄所谓/Runtime 60 /Terminate这种写法。Procmon 常用稳定方案是脚本等待指定时间后再调用/Terminate。7. 八大常见场景排障剧本下面是最适合直接复用的八类 Procmon 剧本。每个剧本都按“开关、过滤、观察点、常见结论、交付物”组织。现场不要死背按对象套用即可。7.1 程序启动失败或闪退项目内容开关File System / Registry / Process Thread过滤Process Name is xxx.exe → Include观察点CreateFile、Load Image、RegOpenKey、Process Exit常见结论缺 DLL、路径错误、权限不足、安全软件拦截交付物PML、失败事件截图、缺失对象清单、Stack 截图启动失败不要只盯最后的退出事件。真正的问题通常出现在更早的文件查找、注册表读取或 DLL 加载阶段。最后一个报错经常只是结果不是根因。要找第一个改变流程方向的异常点。7.2 安装或更新卡住项目内容开关File System / Registry / Process Thread必要时 Network过滤Process Name contains setup、Process Name is msiexec.exe观察点Temp、Package Cache、ProgramData、RegSetValue常见结论UAC、目录不可写、企业策略、EDR 拦截交付物失败点路径、注册表键、权限需求说明安装类问题最常见的线索是写入失败和注册表写入失败。重点看 Result、Detail 中的 Desired Access以及目标路径是否在受保护目录下。7.3 文件被占用或无法覆盖项目内容开关File System过滤Operation is CreateFile → Include观察点SHARING VIOLATION、ShareMode、Desired Access常见结论另一进程以不兼容共享方式打开文件交付物占用进程、模块、处理建议文件被占用不是简单的“权限不足”。如果 Result 是 SHARING VIOLATION要找的是先占用者和共享模式而不是直接改 ACL。ACCESS DENIED 看权限SHARING VIOLATION 看占用和共享模式。两者不是一类问题。7.4 配置不生效或读写错目录项目内容开关File System / Registry过滤Path contains Config、.ini、.json、目标注册表路径观察点Reparse、WOW6432Node、虚拟化路径常见结论路径重定向、架构不一致、配置写错位置交付物正确路径与错误路径对照这类问题要特别注意 32 位和 64 位路径差异以及 HKLM\Software 与 WOW6432Node 的注册表重定向。7.5 网络访问失败项目内容开关Network配合 File / Registry过滤Process Name is xxx.exe → Include观察点TCP Connect、代理配置、证书路径、失败码常见结论代理、DNS、TLS、证书、安全软件拦截交付物失败地址、端口、阶段、关联配置Procmon 不是抓包工具它看不到完整网络负载。但它能回答“哪个进程连接哪里是否成功”。需要分析数据包内容时再配合 Wireshark。7.6 CPU 异常或卡顿项目内容开关Profiling File / Registry短时间窗口过滤锁定目标进程观察点Profiling 事件、Stack 热点模块、Duration常见结论热点函数、第三方 Hook、过滤驱动介入交付物热点调用栈、模块版本、复测建议CPU 和卡顿问题不能只看失败码。很多时候全是 SUCCESS但 Duration 或 Profiling 能暴露高耗时模块。7.7 登录、注销或关机慢项目内容开关Boot Logging 或登录/关机窗口采集过滤winlogon、userinit、gpupdate、explorer、services观察点GPO、脚本、网络盘、打印、配置文件常见结论网络依赖慢、脚本卡住、策略扩展超时交付物慢点清单、耗时截图、优化方案登录慢和关机慢本质上是时间线问题。先锁定时间段再看哪个对象拖住流程。7.8 打印异常项目内容开关File System / Registry / Process Thread过滤spoolsv.exe、Spool 目录、打印驱动路径观察点SPL / SHD 文件、端口监视器、驱动 DLL常见结论打印驱动、端口监视器、权限或路径异常交付物异常驱动路径、Spool 事件、替换建议打印异常不要只看打印机界面。Procmon 里常能看到 spoolsv.exe 对驱动文件、Spool 目录、注册表打印键的访问失败或共享冲突。8. 分析顺序Summary、Count、Detail、Stack拿到 PML 后推荐按固定顺序分析不要从第一行开始翻。更稳的路线是先看汇总再看分布再看关键事件细节最后看 Stack。打开 PMLProcess Activity SummaryFile / Registry SummaryCount Occurrences回主表过滤关键对象查看 Result / Detail / Duration查看 Stack形成证据结论8.1 先看 SummarySummary 可以帮你快速判断哪个进程最忙、哪个路径最热、哪个注册表键最频繁。不要一上来就对单条 ACCESS DENIED 下结论。8.2 再看 Count OccurrencesCount Occurrences 适合统计 Result、Operation、Process Name 等字段。比如你可以先看 Result 分布确认主要异常是 ACCESS DENIED、NAME NOT FOUND 还是 SHARING VIOLATION。8.3 最后看 Detail 和 StackDetail 里有 Desired Access、ShareMode、Disposition、Options 等关键字段。Stack 能帮你进一步判断是否有第三方 DLL、加载项、EDR、DLP、同步盘或驱动介入。Summary 负责找对象Count 负责看分布Detail 负责看意图Stack 负责追来源。9. 证据打包清单让别人能复盘你的结论Procmon 排障不能只停留在“我看到了”。如果要交给同事、二线、厂商或后续写 SOP就必须打包证据。证据包的目标是让别人能沿着你的路径复盘而不是重新猜。9.1 标准证据包problem_xxx_YYYYMMDD_HHMM_All.pml problem_xxx_YYYYMMDD_HHMM_Filtered.pml problem_xxx_YYYYMMDD_HHMM.csv screens_process_tree.png screens_stack.png screens_summary.png filters.pmc readme.txt9.2 README 应该写什么【问题现象】 用户反馈 xxx。 【影响范围】 单台 / 多台 / 某用户 / 某版本 / 某网络环境。 【复现步骤】 1. 打开 xxx 2. 执行 xxx 3. 出现 xxx 【采集方式】 使用 Procmon 管理员运行。 采集前 CtrlX 清屏复现后 CtrlE 立停。 【过滤条件】 Process Name is xxx.exe。 Result contains DENIED / VIOLATION / NOT FOUND。 【关键发现】 目标进程在复现窗口内访问 xxx 路径失败。 Result 为 xxx。 Detail 显示 xxx。 Stack 中出现 xxx 模块。 【当前判断】 当前证据指向 xxx需通过 xxx 方式验证。 【建议动作】 修复权限 / 替换驱动 / 禁用加载项 / 加白名单 / 对比正常机器。高质量证据包的标准是别人不用问你也能知道怎么复现、怎么看、为什么这么判断。10. 常见误判与反模式Procmon 很强但它不会自动给你根因。很多误判来自工具使用方式错误而不是工具能力不足。误判问题正确做法把类别开关当过滤器以为已经控制采集范围用 Filter 和 Drop 明确控制一直开捕获不暂停时间线不断被污染复现后立刻停止只看 Result漏掉 Detail、Duration、Stack多字段联动判断看到 NAME NOT FOUND 就认定故障很多是正常探测看频率、上下文和是否阻断流程长跑不开 Backing File证据易丢或内存压力大写盘并轮转过早启用 Drop丢掉上下文先验证过滤器只保存 CSV丢失栈和元数据PML 必须保留不做正常机器对比相关性不足异常机 vs 正常机对照最危险的不是看不懂 Procmon而是看懂了一小段就急着下结论。10.1 NAME NOT FOUND 不一定是错误很多程序启动时会探测多个路径、多个 DLL、多个配置文件出现 NAME NOT FOUND 很正常。只有当它高频出现、发生在关键路径、和故障时间一致、后续没有成功回退时才值得重点分析。10.2 SUCCESS 也可能是性能问题启动慢、登录慢、卡顿这类问题往往不是失败事件而是大量成功但耗时高的事件。不要把 SUCCESS 全排掉后再去分析性能。故障类问题看 Result性能类问题看 Duration 和重复次数。11. 可直接复制的过滤与高亮片段下面这些片段适合放到团队知识库。现场不用每次从零想按场景复制即可。11.1 只看目标进程异常Process Name is yourapp.exe → Include Result is SUCCESS → Exclude11.2 定位文件被占用或拒绝访问Operation is CreateFile → Include Result is SHARING VIOLATION → Include Result is ACCESS DENIED → Include11.3 定位路径或配置缺失Result is NAME NOT FOUND → Include Result is PATH NOT FOUND → Include Path contains \Config\ → Include Path ends with .json → Include Path ends with .ini → Include11.4 PMARK 语义锚点Path contains \PMARK\ → Include Path contains \PMARK\ → Highlight11.5 慢调用分析Duration is greater than 0.1 → Include Process Name is yourapp.exe → Include过滤片段不是越多越好。先从最小规则开始再逐步加条件。12. 总结把 Procmon 用成剧本化证据机器Procmon 的真正价值不是让你看到更多事件而是让你把模糊现象拆成可验证对象。用户说“卡”你要能回答哪个进程卡用户说“打不开”你要能回答哪个文件、注册表键、DLL 或权限失败用户说“关机慢”你要能回答哪个阶段、哪个服务、哪个路径拖住了时间线。本篇最重要的结论可以压缩成三句话第一采集前先搭现场别盲抓第二分析时先 Summary 和 Count再 Detail 和 Stack第三交付时必须给 PML、截图、过滤条件和文字结论。从 Mark 式排障视角看Procmon 剧本化的核心是现象只是入口证据链才是结论的地基。后续处理 Outlook、Explorer、Teams、OneDrive、飞连、EDR、打印、安装失败、文件占用、登录慢、关机慢等问题时可以直接从这份剧本开始。先按模板拿证据再根据场景下钻。这样做的好处不是显得专业而是减少猜测让每一次排障都能沉淀成工单、SOP 和可复用博客。返回顶部