Как зарегистрироваться в качестве пользователя ETW в реальном времени для событий ядра NT?
Я смог использовать logman с некоторым успехом, чтобы сбросить некоторые следы ядра. Тем не менее, я хотел бы иметь возможность программно включать в реальном времени потребление событий ядра (главным образом, создание / удаление потоков / процессов и файловый ввод / вывод) в моем приложении. Каков наилучший подход к этой задаче?
2 ответа
Вы включаете события ядра в StartTrace. В EVENT_TRACE_PROPERTIES, который вы передаете StartTrace, EnableFlags содержит различные флаги для разных поставщиков событий ядра. Установите для параметра LogFileMode в EVENT_TRACE_PROPERTIES значение EVENT_TRACE_REAL_TIME_MODE для использования в режиме реального времени. Затем вы можете использовать события, используя ProcessTrace.
Обратите внимание, что StartTrace может завершиться ошибкой с ERROR_ALREADY_EXISTS, и в этот момент, если вам нужно изменить свойства сеанса, вы захотите использовать ControlTrace. Также обратите внимание, что вам придется запускать вашу программу как администратор, если у вас включен UAC; и что, если вы отлаживаете, вам также нужно запустить Visual Studio как администратор. Ваша программа также должна иметь манифест (если он у вас есть) установлен как "Администратор" для привилегий.
Если вы ищете в MSDN OpenTrace, ProcessTrace и StartTrace, вы найдете ссылки на различные примеры, которые дадут вам то, что вы хотите.