记一次 .NET 某智能视觉软件 句柄爆高分析 - 一线码农
💡
原文中文,约1600字,阅读约需4分钟。
📝
内容提要
一名学员在调试中发现程序的process句柄异常高,经过分析确认是ManageEngine Unified Endpoint Security - Agent服务导致的。使用perfview工具追踪后,发现halcon的ReadImage()方法创建了大量句柄,最终关闭该服务后句柄恢复正常。
🎯
关键要点
- 一名学员在调试中发现程序的process句柄异常高,达到几百万个。
- 使用procdump抓取minidump,确认process句柄数量确实很高。
- 学员使用perfview工具追踪,发现大量句柄由halcon的ReadImage()方法创建。
- ReadImage()方法涉及文件IO,与文件系统驱动fltmgr.sys交互,但被dcfafilter.sys驱动拦截。
- dcfafilter.sys驱动是ManageEngine Unified Endpoint Security - Agent服务的一部分。
- 关闭ManageEngine服务后,句柄数量恢复正常。
❓
延伸问答
程序句柄异常高的原因是什么?
程序句柄异常高是由于ManageEngine Unified Endpoint Security - Agent服务导致的。
如何确认程序的句柄数量是否真的很高?
可以使用procdump抓取minidump,并通过WinDbg的!handle命令确认句柄数量。
ReadImage()方法与句柄数量有什么关系?
ReadImage()方法创建了大量句柄,并且涉及文件IO,与文件系统驱动交互。
如何使用perfview工具分析句柄问题?
使用perfview追踪程序运行,查看Windows Handle Ref Count Stacks选项卡,分析句柄的来源。
关闭ManageEngine服务后会发生什么?
关闭ManageEngine服务后,程序的句柄数量恢复正常。
dcfafilter.sys驱动的作用是什么?
dcfafilter.sys驱动是ManageEngine Unified Endpoint Security - Agent服务的一部分,负责拦截文件IO操作。
➡️