Как создать потребителя etw в реальном времени для провайдера TraceLogging (ядра)?

Я пытаюсь создать потребителя в реальном времени для 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 может создавать сессия до регистрации провайдера. Я хочу сделать то же самое. Что я должен делать?


person Игорь Пугачев    schedule 20.08.2020    source источник


Ответы (1)


Вы должны создать сеанс ETW до OpenTrace с помощью StartTrace и функции EnableTrace .

person Игорь Пугачев    schedule 20.08.2020