Предоставление данных счетчика с помощью версии 2.0

Современные поставщики данных производительности используют манифест для определения данных счетчика и API-интерфейсы поставщика счетчиков производительности для управления данными в контексте поставщика. Поставщики, реализованные с помощью API поставщика манифеста и счетчика производительности, часто называются поставщиками версии 2. Windows поддерживает поставщики пользовательского режима версии 2 в Windows Vista или более поздней версии и поставщики режима ядра версии 2 в Windows 7 или более поздней версии.

На этой странице описаны поставщики пользовательского режима версии 2. Сведения о поставщиках режима ядра версии 2 см. в разделе Мониторинг производительности в режиме ядра.

Во время выполнения поставщики версии 2 работают следующим образом:

  • Процесс поставщика регистрируется в системе счетчика производительности Windows, вызывая PerfStartProvider и PerfSetCounterSetInfo. Поставщик при необходимости предоставляет функцию обратного вызова, которая будет получать уведомления о запросах потребителей.
  • Процесс поставщика добавляет или удаляет экземпляры соответствующим образом с помощью PerfCreateInstance и PerfDeleteInstance. Поставщик обновляет значения счетчиков при их изменении с помощью API PerfSet***.
  • Потребитель запрашивает данные из набора счетчиков. Система проверяет, имеет ли вызывающий объект разрешения на сбор данных. Затем система использует рабочий поток, выполняющийся в процессе поставщика, для обработки запроса, вызывая функцию обратного вызова поставщика, если это необходимо. Рабочий поток копирует собранные данные в управляемый системой буфер, а затем система возвращает данные потребителю.

Действия по созданию поставщика

  1. Напишите манифест, определяющий данные счетчика, которые будет предоставлять поставщик. Дополнительные сведения о написании манифеста см. в разделе Схема счетчиков производительности.

  2. Используйте CTRPP для создания кода шаблона, который вы включаете в поставщик. Код шаблона включает структуры, определяющие наборы счетчиков, функции CounterInitialize и CounterCleanup , а также строки ресурсов.

    Поставщик должен вызывать функции CounterInitialize и CounterCleanup . CounterInitialize вызывает функцию PerfStartProvider для регистрации поставщика, а также вызывает функцию PerfSetCounterSetInfo для инициализации набора счетчиков. CounterCleanup вызывает функцию PerfStopProvider, чтобы удалить регистрацию поставщика.

  3. Включите код шаблона из предыдущего шага в проект и завершите работу поставщика.

    Чтобы завершить работу поставщика, необходимо вызвать функцию PerfCreateInstance для каждого экземпляра указанного набора счетчиков.

    Чтобы задать значения счетчиков, вызовите одну из следующих функций:

    Преимущество использования PerfSetCounterRefValue заключается в том, что вам не нужно вызывать функцию, чтобы задать или обновить значение счетчика. Вы просто обновляете локальную переменную счетчика (переменную, на которую указываются ссылочные точки), а счетчики производительности используют указатель для доступа к значению счетчика.

    Если вы не используете PerfSetCounterRefValue, можно использовать следующие функции для увеличения или уменьшения значения счетчика:

    Перед выходом поставщика он должен вызвать PerfDeleteInstance для каждого созданного экземпляра набора счетчиков.

    Если вы указали атрибут обратного вызова в элементе provider в манифесте или использовали аргумент -NotificationCallback при вызове CTRPP, необходимо реализовать функцию обратного вызова ControlCallback . Функция обратного вызова передается в CounterInitialize.

    Если вы использовали -MemoryRoutines при вызовеCTRPP, необходимо реализовать функции обратного вызова AllocateMemory и FreeMemory . Функции обратного вызова передаются в CounterInitialize.

  4. При установке поставщика используйте средство LodCtr, чтобы записать имя двоичного файла, содержащего локализованные строки ресурсов и идентификаторы ресурсов, в реестр. Дополнительные сведения об использовании LodCtr см. в разделе Схема счетчиков производительности.

  5. При удалении поставщика используйте средство UnlodCtr, чтобы удалить сведения о поставщике из реестра.