Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C使用ETW内核跟踪#_C#_Etw - Fatal编程技术网

C# 使用C使用ETW内核跟踪#

C# 使用C使用ETW内核跟踪#,c#,etw,C#,Etw,我正在使用Windows Server 2012,并试图使用C#从ETW使用内核跟踪。例如,我有一个名为“LiveKernel”的数据收集器集,它有一个“Windows内核跟踪”提供程序来捕获线程系统调用事件,流模式是实时的 作为起点,我尝试使用这些事件。但是,我收到的输出总是: Listening...Press <Enter> to exit 这里有我遗漏的东西吗?有没有更好的方法来使用内核跟踪?“Windows内核跟踪”提供程序是否有什么特殊之处,使我们无法实时使用它的事件?

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

作为起点,我尝试使用这些事件。但是,我收到的输出总是:

Listening...Press <Enter> to exit

这里有我遗漏的东西吗?有没有更好的方法来使用内核跟踪?“Windows内核跟踪”提供程序是否有什么特殊之处,使我们无法实时使用它的事件?

要实现您希望从中使用TraceeEvent库的目的,请使用它。我已经在以管理员身份运行的Windows8上测试了这个示例,它运行得非常好

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

Action<TraceEvent> action = delegate(TraceEvent data)
{
  foreach (var name in data.PayloadNames)
  {
    Console.WriteLine("\t" + name + " -- " + data.PayloadByName(name));
  }
};
Action Action=delegate(跟踪事件数据)
{
foreach(data.PayloadNames中的变量名)
{
Console.WriteLine(“\t”+name+“--”+data.PayloadByName(name));
}
};
只需运行示例,然后启动一个新流程,您就可以开始看到一些跟踪信息


--Lars

看一看,这很好,对于示例中的提供程序来说似乎效果很好,但对于“Windows内核跟踪”提供程序,我无法让它发挥作用。感谢您——您使用Microsoft Windows内核进程提供程序提供的很好,我能够重现您的结果。但是,我在使用“Windows内核跟踪”提供程序时也遇到了一些问题。我将代码更新为使用“Windows内核提供程序”,将进程的enable Provider中的掩码设置为0x1,并且没有数据输出。Windows内核提供程序有什么特别的地方不允许我实时使用事件吗?据我所知,没有,但我从未使用过该提供程序。您对那个特定的提供程序感兴趣的是什么事件?我对syscall事件感兴趣,除了“循环内核会话提供程序”之外,其他任何提供程序都不能提供syscall事件它提供了与内核跟踪提供程序相同的精确数据,使用上面的代码也同样不起作用。关键是调用EnableKernelProvider。谢谢你的帮助!
Action<TraceEvent> action = delegate(TraceEvent data)
{
  foreach (var name in data.PayloadNames)
  {
    Console.WriteLine("\t" + name + " -- " + data.PayloadByName(name));
  }
};