如何注册为NT Kernel Events的实时ETW消费者?

我已经能够使用一些成功的logman转储一些内核痕迹。 但是,我希望能够以编程方式实现在我的应用程序中实时使用内核事件(主要是线程/进程创build/删除和文件I / O)。 这个任务的最佳方法是什么?

在StartTrace中启用内核事件。 在传递给StartTrace的EVENT_TRACE_PROPERTIES中,EnableFlags包含不同内核事件提供者的各种标志。 将EVENT_TRACE_PROPERTIES中的LogFileMode设置为EVENT_TRACE_REAL_TIME_MODE ,以成为实时使用者。 然后您可以使用ProcessTrace消耗事件。

请注意,StartTrace可能会因为ERROR_ALREADY_EXISTS而失败,此时如果您需要更改会话属性,则需要使用ControlTrace。 另外请注意,如果您启用了UAC,则必须以“管理员”身份运行程序; 而且如果你正在调试,你还需要以管理员身份运行Visual Studio。 您的程序也需要将其清单(如果有的话)设置为“以管理员身份”进行权限设置。

如果你在MSDN上搜索OpenTrace,ProcessTrace和StartTrace,你可以找到各种例子的链接,这些例子会给你你想要的。