记一次 .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操作。

➡️

继续阅读