Я некоторое время работал с ETW через библиотеку событий Trace, и сейчас я смотрю на библиотеку TX.
Однако, несмотря на чтение документов и загрузку примеров, я изо всех сил пытаюсь начать. Все примеры ETW вращаются вокруг чтения файлов etl, а это не то, что я пытаюсь сделать. Я не могу найти пример для начала сеанса и получения данных.
Например, код LINQPad запускает сеансы и подписывается на определенное событие (Process Freeze) с использованием библиотеки событий Trace
var sessionName = "My ETW Session";
var providerName = "Microsoft-Windows-Kernel-Process";
using (var session = new TraceEventSession(sessionName))
{
session.EnableProvider(providerName, TraceEventLevel.Verbose, 0x00000200);
var parser = new RegisteredTraceEventParser(session.Source);
parser
.Observe(providerName, "ProcessFreeze/Start")
.Select(te => new
{
ProcessID = te.ProcessID,
FrozenProcessID = te.PayloadByName("FrozenProcessID"),
CreateTime = te.PayloadByName("CreateTime"),
ThreadID = te.ThreadID,
te.TimeStamp,
Raw = te.ToString(),
})
.DumpLatest();
session.Source.Process();
}
Как можно сделать эквивалент в TX?
Нужно ли мне извлекать манифест для Microsoft-Windows-Kernel-Process
и использовать его для генерации классов?
Как начать сеанс с необходимыми параметрами и подписаться на него?
Edit:
Я добился некоторого успеха в получении некоторых данных, подписавшись на сеанс, только что созданный с этим
var etwTraceSessionObservable = EtwObservable.FromSession(sessionName);
etwTraceSessionObservable.DumpLatest();
Хотя он не содержит много полезных данных. Я думаю, что хочу использовать AddRealTimeSession для объекта воспроизведения.