对this问题的回答使我开始考虑使用“Windows事件跟踪”来满足我们的跟踪需求。我遇到了NTrace,这似乎是从C#代码生成ETW事件的好方法(使用与XP兼容的“经典提供者”模型)。
但是,我无法找到使用这些事件的简单方法 - 实时查看它们和/或将它们记录到文件中。我找到的唯一方法是在NTrace文档中描述:使用仅作为Windows DDK的一部分提供的工具。
如果字段中存在复杂问题,我们可能需要让用户生成包含跟踪的文件。我们不能要求用户下载DDK或执行一些复杂的操作来执行此操作。
是否有一种直接,用户友好的方式将ETW事件记录到文件中?
此外,如果某人在Windows Vista / 7上没有以管理员身份运行,他们是否可以使用ETW事件?
答案 0 :(得分:3)
Windows事件日志读取ETW。事实上,我认为这是消费者(非程序)查看和导出ETW痕迹的正确方法。
This question on msdn讨论未显示日志时要执行的操作。这有什么帮助吗?
答案 1 :(得分:3)
TraceView是最简单的开箱即用解决方案,但您可以编写自己的特定于您的提供商的ETW查看器。这将使您可以完全控制演示文稿并使最终用户更容易,因为TraceView实际上是一个调试工具,而不是您可以要求最终用户运行的。
就实时追踪而言,according to the documentation:
只有具有管理权限的用户,Performance Log Users组中的用户以及作为LocalSystem,LocalService,NetworkService运行的服务才能实时使用事件。要授予受限用户实时使用事件的能力,请将其添加到Performance Log Users组。
Windows XP和Windows 2000:任何人都可以使用实时事件。
如果您有兴趣编写自己的ETW查看器(实时或日志文件),here is the relevant documentation。
答案 2 :(得分:2)
ETW跟踪旨在仅由管理员运行,因为跟踪可能包含个人身份信息。如果非管理员可以捕获跟踪,则会造成安全威胁。
以下是来自xperf的警告示例
您刚捕获的跟踪“C:\ Windows \ system32 \ kernel.etl”可能包含 个人身份信息,包括但不一定限于访问文件的路径,访问注册表的路径和进程名称。确切的信息取决于记录的事件。与其他人分享此跟踪时请注意这一点。
希望这能回答你的问题
答案 3 :(得分:1)
以下是如何从自己的custom provider获取自定义ETW跟踪以及如何在managed code
中使用ETW希望这有帮助。
答案 4 :(得分:1)