在Windows事件跟踪(ETW)中,TraceEventSession不会捕获来自记事本的读取事件

问题描述 投票:1回答:1

我使用点击数过滤器:

session.EnableKernelProvider(KernelTraceEventParser.Keywords.DiskFileIO |
                                             KernelTraceEventParser.Keywords.FileIOInit |
                                             KernelTraceEventParser.Keywords.FileIO);

我订阅了DiskIOReadFileIORead事件。

如果我通过记事本打开文件,则不会发生该事件。

但是,如果我通过记事本++打开文件,则会发生这种情况。

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。

c# windows etw
1个回答
1
投票

Source添加FileIOQueryInfo,像这样

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:\复制的问题>

[通过记事本,写字板在E:\中打开txt文件进行了测试

[通过MSWord在E:\ drive中打开一个单词文件进行了测试

PS

如果要按过程进行过滤,则可以使用

obj.ProcessName == "notepad"

参考

强烈推荐通过GIT进行此doc

”>
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.