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