Создание библиотеки DLL расширения производительности

Важно!

Из-за значительных ограничений производительности и надежности метод предоставления данных счетчика производительности, описанный в этом разделе, может быть изменен или недоступен в будущем. Вместо этого корпорация Майкрософт рекомендует использовать метод, описанный в разделе Предоставление данных счетчика с помощью версии 2.0 для создания новых счетчиков производительности, а также перенести существующие счетчики производительности для использования этого метода.

Поставщик версии 1 использует библиотеку DLL производительности, которая предоставляет данные счетчика потребителям. Библиотека DLL производительности должна экспортировать функции OpenPerformanceData, CollectPerformanceData и ClosePerformanceData . Как правило, для экспорта функций из библиотеки DLL используется файл определения модуля (DEF). Система вызывает эти функции, когда потребитель запрашивает данные о производительности.

При первом вызове объекта-получателя RegQueryValueEx или, если потребитель использует функцию RegOpenKey или RegConnectRegistry для открытия HKEY_PERFORMANCE_DATA, система вызывает функцию OpenPerformanceData для каждого поставщика, зарегистрированного на компьютере. Исключением является, если поставщик указывает список поддерживаемых объектов в [objects] разделе файла .INI. В этом случае система вызывает поставщик только в том случае, если один из запрашиваемых объектов соответствует объекту из списка.

Функция OpenPerformanceData предоставляет каждому поставщику возможность инициализировать свои структуры данных производительности. Затем, если функция OpenPerformanceData возвращается успешно, система вызывает функцию CollectPerformanceData поставщика. Последующие вызовы RegQueryValueEx приводят к тому, что система вызывает функцию CollectPerformanceData .

Когда потребитель завершает сбор данных о производительности, он указывает HKEY_PERFORMANCE_DATA в вызове функции RegCloseKey . Это приводит к тому, что система вызывает функцию ClosePerformanceData для каждого поставщика. Затем поставщики выгружаются.

Несколько потребителей могут одновременно собирать данные о производительности. Система вызывает функции OpenPerformanceData и ClosePerformanceData только один раз при каждой загрузке или выгрузке библиотеки DLL.

Примечание

Обязательно включите extern "C" в код C++, чтобы предотвратить добавление компилятором украшений в имена функций; в противном случае система может не найти ваши функции.

Примечание

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

Дополнительные сведения о написании библиотеки DLL производительности см. в следующих разделах: