首页 > 解决方案 > 如何为 TraceLogging 提供者(内核)创建实时 etw 消费者?

问题描述

我正在尝试为在驱动程序中声明的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。我究竟做错了什么?我试着在驱动程序ProcessTrace之前和之后打电话。TraceLoggingRegister结果是一样的。

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

标签: c++windowsetwwindows-kernel

解决方案


OpenTrace您必须先通过StartTraceEnableTrace函数创建 ETW 会话。


推荐阅读