简介:FILEMON V4.33是一款经典系统文件监控工具,面向系统管理员和开发者,用于实时跟踪进程对文件和注册表的访问,帮助排查软件冲突、理解软件运行机制并定位性能问题。该工具以纯绿色形式提供,无广告、无插件,解压即可使用,适合需要快速测试或避免改动系统配置的用户。压缩包为rar格式,共2个文件,包含一个html说明文档和一个zip格式的主程序压缩包,整体仅77KB,轻量便携;html说明可用于查阅使用指导、版本信息与注意事项,zip内则是可直接运行的程序文件。功能上支持实时监控、操作类型与进程路径查看、条件过滤、快速搜索及完整日志记录,且不修改系统状态,作为诊断工具安全性较高。需要注意V4.33属于早期版本,在旧系统环境中稳定性较好,但使用前应确认与当前操作系统兼容。目前已有245人学习下载,适合从事系统维护、软件测试或安全分析的人员收藏使用。
1. 为什么还要用 filemon V4.33:轻量文件监视里的一个特殊位置
文件被占用、程序启动慢、绿色软件偷偷写注册表和配置——这三类问题至少有一个,拉出 filemon V4.33 这台老机器能直接解决。这款文件系统监视工具体积不到 1MB,不需要装客户端,双击后给当前系统的每一个读、写、打开、删除动作实时录像,可以按进程名、按路径、按操作类型做过滤。十多年前它是系统诊断工具集里的标配,今天拿它处理老旧系统、虚拟机环境和嵌入式的文件行为,依然比一堆新框架轻得多。适合谁?手上有存量系统的运维,做通用软件兼容性验证的测试,以及想搞清软件在后台动了哪些文件的开发者。
2. 监视原理与视图判读:filemon 捕获的事件到底准不准
2.1 捕获的是内核 IRP 不是 API Hook,所以能看到更多
filemon V4.33 不走用户态 API Hook 那套路线。它在启动时往内核里挂一个文件系统过滤驱动,这个驱动位于文件系统管理器之上、各卷设备对象之下,基本上所有发给卷和文件系统的请求都会从它这里过一遍。这意味着它对 Explorer 的目录枚举、杀毒软件的扫描打开、系统的预读取行为全部可见,而这些动作如果用 API Hook 的方式去挂 OpenFile、ReadFile,往往会被应用层缓存和分发机制遮挡掉一部分。
"能看的多"的另一面是"要理解的也多"。界面上刷出来的都是一次次内核请求,每条请求都带一个像 IRP_MJ_CREATE、IRP_MJ_READ、IRP_MJ_WRITE、IRP_MJ_DIRECTORY_CONTROL 这样的操作名。很多第一次用的人觉得这些名字陌生,其实能把它们对应到常见的文件行为:IRP_MJ_CREATE 对应打开或创建,IRP_MJ_READ 对应读,IRP_MJ_WRITE 对应写,IRP_MJ_CLEANUP 对应关闭句柄前的清理。
提示:filemon 看到的粒度是"内核请求",不是"用户代码调用"。一个简单的 ReadFile 在底层可能被拆成一次 IRP_MJ_CREATE 加多次 IRP_MJ_READ,日志行数比想象中多,这是正常现象。
2.2 五列事件的含义:从时间戳到完整路径
默认界面是五列:Time、Process、Request、Result、Other,最后一列大部分时间显示被访问的完整路径。Time 是请求发生的时间戳,粒度到秒级;Process 列显示发起请求的进程映像名,比如 notepad.exe,如果在 Options 里勾选显示进程 ID 的开关,还可以看到具体的 PID;Request 列是刚才说的 IRP 请求名;Result 列是这次请求在内核层面的返回状态。
Result 列是最该盯住的位置。常见取值有 SUCCESS、ACCESS DENIED、NOT FOUND、SHARING VIOLATION、BUFFER OVERFLOW。SUCCESS 代表请求被文件系统接受了,但不代表读取的数据内容正确,只是说这次 I/O 操作从状态机上通过了。NOT FOUND 经常在程序探测某个文件是否存在时出现,Explorer 在目录里找图标缓存文件而不得,也会刷出一整片 NOT FOUND。
Other 列显示路径时,既有完整路径也有相对路径。想要精确分析一个文件的访问来源,最好是双击那条日志,在弹出的属性框里看完整路径,同时结合 Option 菜单里的卷过滤来决定要不要接收来自多个分区的日志。路径内容里还可能带 NTFS 内部对象名,不要看见不认识的后缀就紧张。
2.3 三个容易误读的细节
第一,BUFFER OVERFLOW 不一定是坏事。有时它表示读缓冲区大小不够,请求被文件系统以更大的缓冲区重试,最终依然成功完成。把 BUFFER OVERFLOW 直接当故障处理,会误判一批本来正常的软件。
第二,进程列只显示映像名时,同名进程会混在一起。如果机器上起了多个同名实例,必须在 Options 里打开显示进程 ID 的选项,否则看到的日志属于哪一个进程根本说不清。
第三,过滤驱动这一层看不到真正的磁盘扇区读写。低层如磁盘驱动的读扇区、写扇区并不是文件系统过滤驱动的关注范围,那属于磁盘级监视工具的领域。用 filemon 判断"某文件是不是被读写了"没问题,但不要拿它论证"磁盘是不是真有物理活动"。
3. 过滤器配置实例:从全量抓取到只看一个进程
3.1 打开过滤面板的三个入口与界面结构
过滤面板有三个入口:菜单栏里的 Options -> Filter/Highlight;直接按快捷键 Ctrl+F;在某条日志上右键选择 Include 或 Exclude。面板打开后,上下两块区域,上方是 Highlight 高亮规则,下方是 Filter 过滤规则。Filter 区域里又分 Include 和 Exclude 两个输入框,这两个框同时生效,规则是"先放行 Include 匹配的内容,再用 Exclude 排除内容"。
初次配置最容易犯的错是"Include 里只填一个 notepad.exe,以为会只显示记事本"。实际效果取决于进程名写的是不是完整匹配,如果界面上进程列显示的是 NOTEPAD.EXE,那么 Include 一行写 notepad.exe 也可能命中,因为匹配是大小写不敏感的。推荐写法是打开某软件后先看一条它发出的日志,直接右键这条日志选 Include Process,让程序自己把正确的进程名填进输入框,比自己手敲稳妥。
过滤规则支持用分号分隔多个条目,通配符就是常见的 * 和 ?。比如只看某进程读配置文件,可以这样写:
Include 框: myapp.exe;cfgExclude 框: *\temp*
这段规则表达的意思是:只保留进程名为 myapp.exe、路径里包含 cfg 的请求,同时把所有路径里含 \temp\ 的请求剔除掉。通配符是按字符串匹配算的,不要把这里当成正则表达式用。
3.2 把 Request 字符串也当成过滤条件
Filter 的 Include 框不只限定进程和路径,IRP 请求名同样能写进去。如果只想看某进程发生了哪些写操作,就在 Include 框里写:
myapp.exe;IRP_MJ_WRITE
注意分号两边的条件是"或"的关系,不是"并且"。这样可能把进程匹配和请求名匹配混成一个结果,尤其是机器上还有其他进程发写请求时,日志行会被它们刷上来。想要更严格的组合过滤,比较好的办法是让它走两个阶段:先按进程名过滤,等确认进程名准确后,再把 IRP_MJ_WRITE 单独加到 Exclude 或 Include 行里做条件切换。
注意:Include 和 Exclude 的优先级是先 Include 后 Exclude,但同一输入框内多条规则之间是或关系。如果想把"排除写操作"和"排除临时目录"叠加,就把它们都写进行 Exclude 框,用分号分隔。
3.3 高亮规则、历史深度与缓冲区价值
高亮规则和过滤规则在同一个面板里,高亮不会把日志行隐藏,只是按颜色把匹配的行标出来。右键某条日志选 Highlight Process,就能把这个进程的所有日志刷成高亮色,适合同时观察两个进程之间的交互,比如一个写一个读,再有黑匣子一样看两边的时序。
历史深度默认是几千行,内存足够的话,在做长时段抓取前先把这个值调大。缓冲区进度条如果顶到 100%,新日志会被丢弃而不是覆盖旧日志,所以长时间无人看守地抓日志,丢数据是必然的。建议超过十分钟的抓取直接规划成"只过滤单个进程 + 导出到文件"的方式,不要依赖屏幕上的环形缓冲。
过滤规则改动后,已经存在于界面里的旧日志不会重新按新规则过滤,仍保留原样。想要界面干净,先清空显示,再等新日志进来。养成一个习惯:每改一次过滤条件,先习惯性地用菜单清一次屏,否则很容易分析到一半发现混入了修改规则前的数据。
4. 三个高频排查场景:启动慢、文件占用与绿色软件便携化
4.1 程序启动慢:定位重复读取与无效路径探测
启动慢的软件,在 filemon 里往往有两种典型画面。一是同一个配置文件被反复打开,例如某程序在启动阶段对同一路径做了几十次 IRP_MJ_CREATE,每次结果都是 SUCCESS,但每次都重新解析路径、重新发起 I/O,消耗全耗在重复动作上。二是大量 NOT FOUND,程序每次启动都要探测一批压根不存在的路径,每探测一次都可能触发额外的权限检查或杀毒扫描,几百次探测累出来就是好几秒的启动延迟。
实际排查时按三步走。首先清屏,过滤器只保留目标进程,路径 Include 留空,让程序启动一次。启动完成后看统计,哪个路径访问次数最多、哪个路径 NOT FOUND 刷屏最多。然后把结果导出成 CSV 文件,再做一次聚合统计。
awk -F, 'NR>1 {print $3, $5}' export.csv | sort | uniq -c | sort -rn | head -30这段命令把导出文件按逗号切列,第三列是进程名,第五列是路径,统计每个"进程+路径"组合出现的次数,并按次数倒序。执行完基本能锁定问题热点。注意 CSV 文件如果路径字段里本身带逗号,字段会被截断,导出时尽量选制表符分隔,或者先用文本编辑器检查路径列是否完整。
定位到热点路径后,再去判断这个访问是可裁剪的,还是必须保留的。有些软件对不存在路径的探测是逻辑写死的,强行改配置反而会让它赖在默认路径上继续探测,这种时候直接放弃治疗,改用楼下说的便携化做法。
4.2 文件被占用和删除失败:找出路径持有者
文件被占用时,filemon 的用法不是看"谁正在访问我关心的路径",而是把路径过滤到目标文件,然后等结果。假如某文件删不掉,系统提示被另一个进程占用,设置了过滤路径后通常能等到两种情况:一种是某个进程每隔几秒就对该文件发起一次 IRP_MJ_CREATE,结果列可能是 SUCCESS 或 SHARING VIOLATION;另一种是根本没日志,说明占用它的进程在抓取期间没有活动。
占用不是持续读写的情况下,推荐配合同工具家族的句柄查看工具一起用。先用句柄列出哪些进程打开了这个路径,拿到进程名和 PID 后,回到 filemon 把过滤条件限定到这个 PID,再把占用进程逼着活动一次,就能看到它在打开这个文件时用的什么参数。
有一种容易翻车的情况是 Explorer 缩略图对图片或视频文件的占用,它会先开文件读头几个字节,然后不关闭句柄,留待后面刷新缩略图时复用。这种占用在 filemon 上表现为进程 explorer.exe 对该路径的一次 CREATE 成功后长时间没有后续 CLEANUP 日志,找到它后把缩略图缓存重建一次,占用多半就释放了。
4.3 绿色软件便携化:确认配置写盘位置
绿色软件便携化第一步,就是要知道软件运行时到底往哪里写东西。没有 filemon 的时候,很多人靠比较安装前后的文件夹差异来猜,费时且不准。正确姿势是先清空过滤条件,只保留目标进程,把软件的配置改一下、跑一遍核心功能、再退出,全程收日志。然后过滤 Result 列的写操作,看路径都落在哪里。
写操作路径通常会分流到三处:安装目录自身、%APPDATA% 或 %LOCALAPPDATA% 下的子目录、注册表(但 filemon 看不到注册表,需要另外用注册表监视工具)。确认写盘位置后,就可以做便携化改造:在软件目录下建配置文件目录,把系统公共配置路径通过环境变量或命令行参数指过去。
便携化改造后必须做一次回归验证:把原本的配置目录改名放一边,再启动软件跑一遍全流程,同时开着 filemon 监视。如果全程没有往系统公共位置写过文件,说明便携化是干净的。每次改便携化配置都强制走一遍这个验证流程,比事后翻文件时间精确得多。
awk -F, '$3 ~ /WRITE|SET_INFORMATION/ && $5 ~ /^C:\\Users/ {print $5}' export.csv | sort | uniq -c这个脚本专门筛出写操作和修改文件属性的请求,统计它们落在用户目录下的路径分布。字段位置同上,如果导出格式不同,先看表头再改列号。出现大量写到用户目录的请求,就需要决定是劫持路径还是把配置目录直接放到绿色包内部。
5. filemon 避坑指南:V4.33 的四个已知坑与实际应对
5.1 64 位系统上闪退或驱动加载失败
现象:双击 filemon.exe 后界面一闪而过,或者看到提示说驱动加载失败;在虚拟机里跑一个简易文件操作程序,界面完全没反应。
原因:V4.33 属于老版本工具,它携带的文件系统过滤驱动没有做新的内核签名认证。新版 64 位系统默认开启内核驱动强制签名,老驱动会被拦在内核门外,工具自然起不来。
解决:测试环境能换就换到 32 位 Windows 7 或 Windows XP 虚拟机;如果必须在 64 位物理机上用,临时开启系统的测试签名模式,开机进入驱动签名强制关闭状态后重启,再运行 filemon。需要特别提醒的是,这种改法只适合隔离的测试机,不要在生产环境的域控制器或关键业务机上碰。
5.2 缓冲区到了 100% 但日志一个都看不到
现象:界面上进度条显示占满了,事件数在涨,但表格区域一片空白,怎么翻滚都看不到新行。
原因:Capture Events 选项被关掉了。filemon 在退出前如果勾选了自动暂停捕获,下次启动会恢复成暂停状态,这时界面接收日志但不停刷新显示,缓冲区还在积累事件,表格却不再滚动更新。
解决:菜单里找到 Capture Events 项,确认它是勾选状态。如果勾着还是空白,再检查过滤规则里的 Exclude 是不是写了一条匹配所有路径的规则,例如单独的 *,这会把全部日志拒之门外。右键某条日志选 Exclude 的操作容易在无意间生成这种全量排除规则,清空 Exclude 输入框即可恢复。
5.3 导出 CSV 后列错位,路径被截断
现象:用 Excel 打开导出的日志,路径列的内容断成多列,进程名和路径对不上。
原因:filemon 导出 CSV 时,路径字段没有做完整的引号包裹处理。路径里出现逗号时,Excel 按逗号拆列,后面的字段全部错位。文件名里带逗号并不罕见,所以导出文件越大,踩中的概率越高。
解决:导出时不要选默认的逗号分隔,选制表符分隔再用 Excel 打开。如果只会导出 CSV,就先在代码里把行按最后两个逗号的位置切开,因为时间和进程列里一般不出现逗号,路径列是最后一个字段,逗号集中在路径中间。用正则或字符串处理把路径字段整体保留。
注意:不要用 Excel 直接编辑再另存为 CSV 后导入 filemon 重新演示,filemon 本身不具备日志回放能力,编辑后的 CSV 只能做离线分析。
5.4 过滤器里写正则表达式,结果匹配不到任何东西
现象:在 Include 框里写了一个类似 ^C:\Program Files 的正则式子,结果日志瞬间清零,一条都不过滤出来。
原因:filemon 的过滤规则不是正则引擎,而是通配符匹配。它只认识 * 和 ?,不支持 ^、$、[] 这类正则语法。把正则写法直接填进去,它会把 ^ 当成普通字符去匹配路径开头,匹配不上。
解决:把正则写法改写成通配符形式。比如想过滤 C 盘 Program Files 目录下的所有路径,写成 C:\Program Files* 就行。想排除系统目录,写成 Exclude: C:\Windows*。如果同时存在多个目录,用分号隔开多个通配符表达式,各自独立匹配。
6. 从 filemon 切到功能更强的进程监视工具:保留习惯,升级链路
6.1 功能对应关系与上手迁移
很多人在老系统上把 filemon 用顺手了,换到新工具后第一反应是界面不习惯。其实新的进程监视主工具(常被叫 Procmon)就是 filemon 的进化版,它的监视链路更宽,不再局限于文件系统,还覆盖了注册表、网络、进程创建和线程活动。核心操作逻辑没变:过滤、清屏、抓取、停止、导出。
迁移建议分三步走。第一步,把 filemon 里熟悉的过滤习惯照搬过来,新工具里的过滤条件同样支持进程名、路径、操作类型,操作符更丰富但默认的包含与排除行为类似。第二步,把结果列对齐,原先的 Process、Request、Result、Path 四类信息在新工具里依然存在,只是新增了时间之外的时长列,用来评估每次操作的耗时。第三步,把周期性导出和分析脚本的路径改成新工具的导出格式。
6.2 保留两个旧习惯,避免一次迁移失效
旧习惯里最值得保留的是"只过滤单进程"和"先清屏再抓取"。新工具功能多,陷阱也多:默认捕获全部事件时,界面滚动速度比 filemon 快得多,十六核机器上几分钟就能刷出几十万行日志,缓冲区比旧工具大也照样顶不住。我的习惯是任何抓取动作开始前,先把过滤条件写进启动脚本,让工具一打开就自动启用过滤,而不是等它先跑起来再手动设置。
6.3 验证方法与输出检查清单
迁移后的第一件事,不是直接分析复杂问题,而是做一轮验证:打开记事本,输入几个字,另存为某个路径,然后检查监视结果里是否出现记事本进程对该路径的打开和写入记录。验证路径要包含空格和中文字符,确认导出表格不乱码、列不错位。
从那以后,我每次换新工具、改便携化配置或排查启动慢问题,都强制自己走一遍"先过滤、再清屏、最后抓取导出"的流程,把日志存成基线文件,和上一轮做对比。这套老办法配合新工具,能省下不少排查时间。希望帮到你。
本文还有配套的精品资源,点击获取