Предоставление данных счетчика с помощью версии 2.0
Современные поставщики данных производительности используют манифест для определения данных счетчика и API-интерфейсы поставщика счетчиков производительности для управления данными в контексте поставщика. Поставщики, реализованные с помощью API поставщика манифеста и счетчика производительности, часто называются поставщиками версии 2. Windows поддерживает поставщики пользовательского режима версии 2 в Windows Vista или более поздней версии и поставщики режима ядра версии 2 в Windows 7 или более поздней версии.
На этой странице описаны поставщики пользовательского режима версии 2. Сведения о поставщиках режима ядра версии 2 см. в разделе Мониторинг производительности в режиме ядра.
Во время выполнения поставщики версии 2 работают следующим образом:
- Процесс поставщика регистрируется в системе счетчика производительности Windows, вызывая PerfStartProvider и PerfSetCounterSetInfo. Поставщик при необходимости предоставляет функцию обратного вызова, которая будет получать уведомления о запросах потребителей.
- Процесс поставщика добавляет или удаляет экземпляры соответствующим образом с помощью PerfCreateInstance и PerfDeleteInstance. Поставщик обновляет значения счетчиков при их изменении с помощью API PerfSet***.
- Потребитель запрашивает данные из набора счетчиков. Система проверяет, имеет ли вызывающий объект разрешения на сбор данных. Затем система использует рабочий поток, выполняющийся в процессе поставщика, для обработки запроса, вызывая функцию обратного вызова поставщика, если это необходимо. Рабочий поток копирует собранные данные в управляемый системой буфер, а затем система возвращает данные потребителю.
Действия по созданию поставщика
Напишите манифест, определяющий данные счетчика, которые будет предоставлять поставщик. Дополнительные сведения о написании манифеста см. в разделе Схема счетчиков производительности.
Используйте CTRPP для создания кода шаблона, который вы включаете в поставщик. Код шаблона включает структуры, определяющие наборы счетчиков, функции CounterInitialize и CounterCleanup , а также строки ресурсов.
Поставщик должен вызывать функции CounterInitialize и CounterCleanup . CounterInitialize вызывает функцию PerfStartProvider для регистрации поставщика, а также вызывает функцию PerfSetCounterSetInfo для инициализации набора счетчиков. CounterCleanup вызывает функцию PerfStopProvider, чтобы удалить регистрацию поставщика.
Включите код шаблона из предыдущего шага в проект и завершите работу поставщика.
Чтобы завершить работу поставщика, необходимо вызвать функцию PerfCreateInstance для каждого экземпляра указанного набора счетчиков.
Чтобы задать значения счетчиков, вызовите одну из следующих функций:
Преимущество использования PerfSetCounterRefValue заключается в том, что вам не нужно вызывать функцию, чтобы задать или обновить значение счетчика. Вы просто обновляете локальную переменную счетчика (переменную, на которую указываются ссылочные точки), а счетчики производительности используют указатель для доступа к значению счетчика.
Если вы не используете PerfSetCounterRefValue, можно использовать следующие функции для увеличения или уменьшения значения счетчика:
- PerfDecrementULongCounterValue
- PerfDecrementULongLongCounterValue
- PerfIncrementULongCounterValue
- PerfIncrementULongLongCounterValue
Перед выходом поставщика он должен вызвать PerfDeleteInstance для каждого созданного экземпляра набора счетчиков.
Если вы указали атрибут обратного вызова в элементе provider в манифесте или использовали аргумент -NotificationCallback при вызове CTRPP, необходимо реализовать функцию обратного вызова ControlCallback . Функция обратного вызова передается в CounterInitialize.
Если вы использовали -MemoryRoutines при вызовеCTRPP, необходимо реализовать функции обратного вызова AllocateMemory и FreeMemory . Функции обратного вызова передаются в CounterInitialize.
При установке поставщика используйте средство LodCtr, чтобы записать имя двоичного файла, содержащего локализованные строки ресурсов и идентификаторы ресурсов, в реестр. Дополнительные сведения об использовании LodCtr см. в разделе Схема счетчиков производительности.
При удалении поставщика используйте средство UnlodCtr, чтобы удалить сведения о поставщике из реестра.