使用C#使用ETW内核跟踪

时间:2013-04-17 19:03:03

标签: c# etw

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

使用the code made available by 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内核跟踪”提供程序是否有一些特殊内容可以防止我们实时消耗它的事件?

1 个答案:

答案 0 :(得分:2)

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

要列出每个有效内容属性名称和值,您需要将样本代理交换到以下示例。

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

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

Trace output when starting IE10 on Win8

- Lars