В трассировке событий для Windows (ETW) TraceEventSession не перехватывает событие чтения из блокнота - PullRequest
1 голос
/ 07 февраля 2020

Я использую фильтры попаданий:

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

Я подписываюсь на события DiskIORead и FileIORead.

Если я открою файл через блокнот, событие не произойдет.

Однако, если я открою файл через notepad ++, это произойдет.

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.

1 Ответ

1 голос
/ 08 февраля 2020

Добавить 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:\ через блокнот, wordpad .
Протестировал его, открыв файл слов в E:\ drive через MSWord

PS

Если вы хотите отфильтровать по процессу, то вы можно использовать obj.ProcessName == "notepad"

Ссылки

Настоятельно рекомендуем пройти через это do c от GIT

...