在 Windows 事件跟踪 (ETW) 中,TraceEventSession 不会从记事本中捕获读取事件
Posted
技术标签:
【中文标题】在 Windows 事件跟踪 (ETW) 中,TraceEventSession 不会从记事本中捕获读取事件【英文标题】:In Event Tracing for Windows (ETW), TraceEventSession don't catch read event from notepad 【发布时间】:2020-05-23 22:40:54 【问题描述】:我使用点击过滤器:
session.EnableKernelProvider(KernelTraceEventParser.Keywords.DiskFileIO |
KernelTraceEventParser.Keywords.FileIOInit |
KernelTraceEventParser.Keywords.FileIO);
我订阅了DiskIORead
和FileIORead
事件。
如果我通过记事本打开文件,则该事件不会发生。
但是,如果我通过记事本++打开文件,就会发生这种情况。
UPD:
完整代码:
class Program
static void Main(string[] args)
using(var session=new TraceEventSession("Test"))
session.EnableKernelProvider(KernelTraceEventParser.Keywords.DiskFileIO |
KernelTraceEventParser.Keywords.FileIOInit |
KernelTraceEventParser.Keywords.FileIO);
session.Source.Kernel.FileIORead += Kernel_FileIORead;
session.Source.Kernel.DiskIORead += Kernel_DiskIORead;
session.Source.Process();
private static void Kernel_FileIORead(Microsoft.Diagnostics.Tracing.Parsers.Kernel.FileIOReadWriteTraceData obj)
if (obj.FileName.ToUpper().StartsWith(@"E"))
Console.WriteLine("2:" + obj.FileName);
private static void Kernel_DiskIORead(Microsoft.Diagnostics.Tracing.Parsers.Kernel.DiskIOTraceData obj)
if (obj.FileName.ToUpper().StartsWith(@"E"))
Console.WriteLine("2:"+obj.FileName);
我使用的是 Windows 10。
【问题讨论】:
@Clint E 是磁盘盘符。我按磁盘字母制作过滤器。 不过,当我创建记事本文件并打开文件时,我看到了发生的事件。只是我已将查询设置为查找以E
开头的文件名。我很确定它也可以与 C 驱动器中的 FileIO 一起使用
@Clint U 有 Windows 10?
是的,没错
are you saying that when you use notepad to open a file in E Drive Kernel_FileIORead does not trigger, but when you open with notepad++ Kernel_FileIORead triggers ?
是的。 Notepad++ 火灾事件
【参考方案1】:
像这样为FileIOQueryInfo
添加Source
session.Source.Kernel.FileIOQueryInfo += Kernel_FileIOQuery;
事件处理程序
private static void Kernel_FileIOQuery(FileIOInfoTraceData obj)
if (obj.FileName.ToUpper().StartsWith(@"E"))
Console.WriteLine("queryInfo:" + obj.FileName);
注意:通过分区E:\
复制问题
通过记事本、wordpad 在E:\
中打开一个txt 文件对其进行了测试。通过MSWord 在E:\ drive
中打开一个word 文件对其进行了测试
附言
如果你想按进程过滤,那么你可以使用 obj.ProcessName == "notepad"
参考文献
强烈推荐通过 GIT 的 doc
【讨论】:
以上是关于在 Windows 事件跟踪 (ETW) 中,TraceEventSession 不会从记事本中捕获读取事件的主要内容,如果未能解决你的问题,请参考以下文章