如何为 TraceLogging 提供者(内核)创建实时 etw 消费者?

Posted

技术标签:

【中文标题】如何为 TraceLogging 提供者(内核)创建实时 etw 消费者?【英文标题】:How to create real-time etw consumer for TraceLogging provider(kernel)? 【发布时间】:2020-12-09 17:42:16 【问题描述】:

我正在尝试为在驱动程序中声明的TraceLogging 提供程序创建实时消费者:

TRACELOGGING_DECLARE_PROVIDER(g_etwProvider);
TRACELOGGING_DEFINE_PROVIDER(g_etwProvider, "TraceLoggingProvider", 
    (/*my guid*/));

用户模式提供者:

EVENT_TRACE_LOGFILEA etwTraceSettings;
char loggerName[]"TraceLoggingProvider";
etwTraceSettings.LoggerName = loggerName;
etwTraceSettings.ProcessTraceMode = PROCESS_TRACE_MODE_REAL_TIME | PROCESS_TRACE_MODE_EVENT_RECORD;
etwTraceSettings.EventRecordCallback = MyCallback;
TRACEHANDLE traceHandle = OpenTraceA(&etwTraceSettings);
ProcessTrace(&traceHandle, 1, nullptr, nullptr);

ProcessTrace 返回ERROR_WMI_INSTANCE_NOT_FOUND。我究竟做错了什么? 我试图在驱动程序中的TraceLoggingRegister 之前和之后调用ProcessTrace。结果是一样的。

例如,logman 可以在提供者注册之前创建会话。我也想这样做。我必须做什么?

【问题讨论】:

【参考方案1】:

您必须在OpenTrace 之前通过StartTrace 和EnableTrace 函数创建ETW 会话。

【讨论】:

以上是关于如何为 TraceLogging 提供者(内核)创建实时 etw 消费者?的主要内容,如果未能解决你的问题,请参考以下文章

学习TraceLogging事件,使用ETW记录,并使用WPA捕获和分析跟踪

当下一个方法应该返回两个生成器的值时,如何为类创建下一个方法?

如何为 SVM 线性核类型选择最佳参数

CSS/JQuery:如何为表格行创建子菜单,使鼠标从行到菜单保持可见?

如何为树莓派编译内核模块?

如何为不同的 linux 内核编译一个 linux 内核模块