0

我正在使用 Windows Server 2012 并尝试使用 C# 使用来自 ETW 的内核跟踪。例如,我有一个名为“LiveKernel”的数据收集器集,它有一个“Windows 内核跟踪”提供程序来捕获线程系统调用事件,并且流模式是实时的。

使用Daniel Vasquez Lopez 提供的代码作为起点,我正在尝试使用这些事件。但是,我收到的输出总是:

Listening...Press <Enter> to exit

这对我来说表明它没有消耗任何事件。我对这段代码的理解是,我所要做的就是更改名称和 GUID 以反映我的新选择,因此我将代码更新为

    Guid RewriteProviderId = new Guid("9E814AAD-3204-11D2-9A82-006008A86939");
    using (EventTraceWatcher watcher = new EventTraceWatcher("LiveKernel", RewriteProviderId)) {

我在这里缺少什么吗?有没有更好的方法来使用内核跟踪?“Windows 内核跟踪”提供程序是否有什么特别之处可以阻止我们实时使用它的事件?

4

1 回答 1

2

要完成您想要使用Vance Morrison 博客中的 TraceEvent 库的要求。我已经在以管理员身份运行的 Windows 8 上测试了该示例,它运行良好。

要列出每个有效负载属性名称和值,您需要将示例委托交换为以下示例。

Action<TraceEvent> action = delegate(TraceEvent data)
{
  foreach (var name in data.PayloadNames)
  {
    Console.WriteLine("\t" + name + " -- " + data.PayloadByName(name));
  }
};

只需运行示例,然后启动一个新进程,您应该会开始看到一些跟踪信息。

在 Win8 上启动 IE10 时的跟踪输出

——拉尔斯

于 2013-04-18T15:59:02.023 回答