我正在使用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内核跟踪”提供程序是否有一些特殊内容可以防止我们实时消耗它的事件?
答案 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));
}
};
只需运行示例然后启动一个新进程,您应该开始看到一些跟踪信息。
- Lars