Автоматизация проверки Process Monitor

Я регулярно использую to для отладки приложения, которое очень часто работает неправильно. Я не занимаюсь разработкой приложения, поэтому исправлять исходный код не вариант. На изображении ниже показан тип вывода, к которому я привык:

Теперь я хочу сделать этот процесс автоматическим. В идеале я хочу иметь сценарий или программу, которая принимает два аргумента: PID процесса и временной интервал (например, 2 секунды). Затем сценарий/программа должен фиксировать события для этого PID в течение этого интервала времени и сохранять их в файле.

Но я не могу найти способ сделать это. После некоторых исследований я пришел к следующим выводам (для меня это все в новинку, поэтому, пожалуйста, поправьте меня, если я ошибаюсь):

  • использует платформу трассировки событий для Windows (ETW) для регистрации событий. В частности, он используетNT Kernel Loggerсеанс, который (по умолчанию?) отслеживает события, предоставляемыеWindows Kernel Traceпровайдер.
  • Платформа ETW предлагает API, и его можно использовать, разработав программу на C++/C#. Это может быть вариант, но он кажется довольно сложным. С другой стороны, есть несколько инструментов командной строки, которые можно использовать для захвата событий ETW: и . поставляется по умолчанию с Windows при использованииtracelogвам нужно сначала установить Visual Studio, но для меня это не вариант.

Так что это кажется хорошим вариантом. Я попробовал следующее:

      C:\Windows\system32>logman start "NT Kernel Logger" -p "Windows Kernel Trace" -ets -nb 16 256 -bs 64 -o C:\trlog.etl -rt
The command completed successfully.

C:\Windows\system32>logman stop "NT Kernel Logger" -ets
The command completed successfully.

C:\Windows\system32>tracerpt C:\trlog.etl -o C:\trlog.xml -of XML -summary C:\trlog-summary.txt -report C:\trlog-report.xml

Input
----------------
File(s):
     C:\trlog.etl

100.00%

Output
----------------
DumpFile:           C:\trlog.xml
Summary:            C:\trlog-summary.txt
Report:             C:\trlog-report.xml

The command completed successfully.

C:\Windows\system32>

Но выводC:\trlog.xmlпохоже, не соответствует ожидаемому результату. Я ожидаю список событий, как показано на рисунке выше, где вы можете различать события реестра, события ввода-вывода и события потоков. Но вместо этого я получаю список событий, подобных этому (я не могу сказать, что это за событие и какие поля соответствуют полям, показанным ):

      <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
    <System>
        <Provider Guid="{9e814aad-3204-11d2-9a82-006008a86939}" />
        <EventID>0</EventID>
        <Version>3</Version>
        <Level>0</Level>
        <Task>0</Task>
        <Opcode>15</Opcode>
        <Keywords>0x0</Keywords>
        <TimeCreated SystemTime="2021-02-19T11:33:47.360274700+00:59" />
        <Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" />
        <Execution ProcessID="10936" ThreadID="5500" ProcessorID="0" KernelTime="90" UserTime="30" />
        <Channel />
        <Computer />
    </System>
    <EventData>
        <Data Name="ProcessId">0x0</Data>
        <Data Name="ServiceState">0x1</Data>
        <Data Name="SubProcessTag">0x80</Data>
        <Data Name="ServiceName">PNRPsvc</Data>
        <Data Name="DisplayName">Peer Name Resolution Protocol</Data>
        <Data Name="ProcessName"></Data>
        <Data Name="LoadOrderGroup"></Data>
        <Data Name="SvchostGroup"></Data>
    </EventData>
    <RenderingInfo Culture="en-DE">
        <Opcode>Services</Opcode>
        <Provider>MSNT_SystemTrace</Provider>
        <EventName xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">SystemConfig</EventName>
    </RenderingInfo>
    <ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
        <EventGuid>{01853a65-418f-4f36-aefc-dc0f1d2fd235}</EventGuid>
    </ExtendedTracingInfo>
</Event>

Мои вопросы:

  • Подходит ли инструмент для того, чего я пытаюсь достичь? Есть ли лучший инструмент/способ сделать это?
  • Еслиlogmanдействительно правильный инструмент, как я могу его использовать? Я запрашиваю правильный сеанс/провайдера. Я разбираю.etlфайл правильно, используяtracerpt? Почему я не вижу того же результата или, по крайней мере, похожего результата на то, чтоProcess Monitorшоу?

0 ответов

Другие вопросы по тегам