【发布时间】:2024-05-22 01:15:02
【问题描述】:
Windows 资源监视器显示(除其他外)磁盘上的哪些文件当前由哪些进程访问。它是实时的。 如何?
我知道它可能使用 ETW,并且我可以使用 xperf 等工具生成跟踪。但是如何在不启动、停止和解析跟踪文件的情况下获取实时信息呢?
我需要以编程方式访问数据,即从 C# 或 C++。
【问题讨论】:
标签: windows etw resource-monitor
Windows 资源监视器显示(除其他外)磁盘上的哪些文件当前由哪些进程访问。它是实时的。 如何?
我知道它可能使用 ETW,并且我可以使用 xperf 等工具生成跟踪。但是如何在不启动、停止和解析跟踪文件的情况下获取实时信息呢?
我需要以编程方式访问数据,即从 C# 或 C++。
【问题讨论】:
标签: windows etw resource-monitor
wOpenTrace/ProcessTrace/StopTrace只要知道提供者GUID就可以实时获取数据。它们可以在 Win2000 上运行,但您需要在回调函数中解析原始数据。要将原始数据转换为人类可读的文本,我们需要 TMF/MOF。不过不确定它们是否是公开的。
对于 Vista/Win7,有一组新的 TDH(跟踪数据助手)API(例如:TdhFormatProperty)。 向下滚动一点上面的链接,你可以看到它们。 TDH 的好处是他们可以为您解析数据(但仍然需要向 TDH 提供 TMF/MOF)。
我尝试使用 Open/Process/StopTrace API 将自己的 .etl 编写为可读的 .txt 程序(因为我需要支持 XP)。我发现这非常困难。 TMF 文件不难解释,因为它是纯文本。困难的是破译 50 多种不同的未记录的类似 prinf 格式规范的内部结构。所以我最终放弃了,坚持使用微软WDK提供的强大的tracefmt.exe。
【讨论】: