Какой API использует Windows Resource Monitor?

Windows Resource Monitor отображает (среди прочего), какие файлы на диске в настоящее время доступны для каких процессов. И это происходит в реальном времени. Как?

Я знаю, что он, вероятно, использует ETW и что я могу генерировать трассировки с помощью таких инструментов, как xperf. Но как получить информацию в реальном времени без необходимости запускать, останавливать и анализировать файл трассировки?

Мне нужно программно получить доступ к данным, то есть из C# или C++.

1 ответ

Решение

w OpenTrace/ ProcessTrace/ StopTrace может получать данные в режиме реального времени, если вы знаете GUID поставщика. Они могут работать на Win2000, но вам нужно проанализировать необработанные данные в ваших функциях обратного вызова. Чтобы преобразовать необработанные данные в понятный человеку текст, нам нужен TMF/MOF. Не уверен, если они являются публичными, хотя.

Для Vista/Win7 существует новый набор API-интерфейсов TDH (Trace Data Helper) (например, TdhFormatProperty). Прокрутите вниз несколько ссылок выше, и вы можете увидеть их. Преимущество TDH состоит в том, что они могут анализировать данные для вас (хотя все равно необходимо предоставить TDH TMF / MOF).

Я попытался написать свой собственный.etl для читаемой программы.txt, используя Open/Process/StopTrace API (потому что мне нужно поддерживать XP). Я обнаружил, что это довольно сложно. Файл TMF не сложно интерпретировать, так как это чистый текст. Сложность состоит в том, чтобы расшифровать более 50 различных недокументированных внутренних структур спецификаций формата printf-like. В итоге я сдался и остановился на мощном файле tracefmt.exe, который есть в Microsoft WDK.

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