7

对这个问题的回答使我考虑使用“Windows 事件跟踪”来满足我们的跟踪需求。我遇到了NTrace,这似乎是从 C# 代码生成 ETW 事件的好方法(使用与 XP 兼容的“经典提供程序”模型)。

但是,我找不到使用这些事件的简单方法 - 实时查看它们和/或将它们记录到文件中。我发现的唯一方法是 NTrace 文档中描述的方法:使用仅作为 Windows DDK 的一部分提供的工具。

在现场出现复杂问题的情况下,我们可能需要要求用户生成包含跟踪的文件。我们不能要求用户下载 DDK 或执行一些复杂的操作来做到这一点。

是否有一种直接、用户友好的方式将 ETW 事件记录到文件中?

此外,如果某人没有以管理员身份运行,是否可以在 Windows Vista/7 上使用 ETW 事件?

4

5 回答 5

3

Windows 事件日志读取 ETW。事实上,我想说这是消费者(非程序)查看和导出 ETW 跟踪的正确方法。

有关示例,请参见此处。http://blogs.microsoft.co.il/blogs/applisec/archive/2009/10/12/reading-etw-tracing-using-event-viewer.aspx

msdn 上的这个问题讨论了当日志不出现时该怎么办。这里有什么帮助吗?

于 2010-03-05T02:37:09.310 回答
3

TraceView 是最简单的开箱即用解决方案,但可以编写您自己的 ETW 查看器,该查看器特定于您的提供商。这将使您可以完全控制演示文稿,并使最终用户更容易使用,因为 TraceView 实际上更像是一个调试工具,而不是您可以要求最终用户运行的工具。

根据文档,就实时跟踪而言:

只有具有管理权限的用户、性能日志用户组中的用户以及作为 LocalSystem、LocalService、NetworkService 运行的服务才能实时消费事件。要授予受限用户实时使用事件的能力,请将其添加到性能日志用户组。

Windows XP 和 Windows 2000:任何人都可以使用实时事件。

如果您有兴趣编写自己的 ETW 查看器(实时或日志文件),请参阅相关文档

于 2010-03-07T21:30:43.520 回答
2

ETW 跟踪旨在仅由管理员运行,因为跟踪可能包含个人身份信息。如果非管理员可以捕获跟踪,它将构成安全威胁。

这是来自 xperf 的警告示例

您刚刚捕获的“C:\Windows\system32\kernel.etl”跟踪可能包含个人身份信息,包括但不一定限于访问文件的路径、访问的注册表路径和进程名称。确切信息取决于记录的事件。与其他人共享此跟踪时,请注意这一点。

希望这能回答你的问题

于 2010-03-19T02:02:56.367 回答
1

以下是如何从您自己的 自定义提供程序获取自定义 ETW 跟踪以及如何在托管代码中使用 ETW

希望这可以帮助。

于 2010-04-02T04:18:40.490 回答
1

IMO Perfview是可用于控制和查看 ETW 跟踪的最佳工具之一。它还可以提供托管调用堆栈。最好的部分是您可以 xcopy 到任何服务器并收集跟踪。

Perfview 使用 TraceEvent 库,这里是示例如何使用 API 和 C#

于 2011-08-07T19:06:01.920 回答