如何为 TraceLogging 提供程序(内核)创建实时 etw 消费者?
How to create real-time etw consumer for TraceLogging provider(kernel)?
我正在尝试为在驱动程序中声明的 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);
ProcessTracereturnsERROR_WMI_INSTANCE_NOT_FOUND
。我究竟做错了什么?
我试图在驱动程序中的 TraceLoggingRegister
之前和之后调用 ProcessTrace
。结果是一样的。
并且,例如,logman 可以在提供商注册之前创建会话。我也想这样做。我必须做什么?
您必须在 OpenTrace
之前通过 StartTrace and EnableTrace 函数创建 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);
ProcessTracereturnsERROR_WMI_INSTANCE_NOT_FOUND
。我究竟做错了什么?
我试图在驱动程序中的 TraceLoggingRegister
之前和之后调用 ProcessTrace
。结果是一样的。
并且,例如,logman 可以在提供商注册之前创建会话。我也想这样做。我必须做什么?
您必须在 OpenTrace
之前通过 StartTrace and EnableTrace 函数创建 ETW 会话。