Функция KeSetHardwareCounterConfiguration (ntddk.h)

Подпрограмма KeSetHardwareCounterConfiguration задает список аппаратных счетчиков, используемых для профилирования потоков.

Синтаксис

NTSTATUS KeSetHardwareCounterConfiguration(
  [in] PHARDWARE_COUNTER CounterArray,
  [in] ULONG             Count
);

Параметры

[in] CounterArray

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

[in] Count

Указывает количество элементов в массиве, на который указывает параметр CounterArray .

Возвращаемое значение

KeSetHardwareCounterConfiguration возвращает STATUS_SUCCESS, если вызов выполнен успешно. Возможные возвращаемые значения ошибок:

Код возврата Описание
STATUS_INVALID_PARAMETER Значение параметра Count превышает максимальное число счетчиков, заданное константой MAX_HW_COUNTERS, определенной в файле заголовка Ntddk.h.
STATUS_WMI_ALREADY_ENABLED Один или несколько счетчиков, указанных в массиве CounterArray , уже включены.
STATUS_NOT_IMPLEMENTED Эта подпрограмма не реализована для архитектуры процессора, на котором выполняется вызывающий объект.

Комментарии

В Windows 7 эта подпрограмма реализована только для архитектур x86, x64 и Itanium. Если вызывающий объект работает на архитектуре процессора, которая не поддерживается, подпрограмма возвращает STATUS_NOT_IMPLEMENTED.

Эта подпрограмма сообщает операционной системе, какие аппаратные счетчики следует использовать для профилирования потоков. Вызывайте эту подпрограмму, только если профилирование потоков отключено. Если массив CounterArray указывает какие-либо аппаратные счетчики, которые используются в данный момент, подпрограмма завершается сбоем и возвращает STATUS_WMI_ALREADY_ENABLED.

Поток приложения может включить профилирование потоков, чтобы получить набор измерений производительности от аппаратных счетчиков в единице мониторинга производительности (PMU) локального процессора. Операционная система поддерживает только одно приложение профилирования одновременно. Параллельные экземпляры приложения профилирования потоков не поддерживаются. Поток может включить профилирование потоков для себя, но не для других потоков.

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

Задайте значение Count = 0, чтобы указать пустую конфигурацию счетчика оборудования. Эта конфигурация эффективно предотвращает использование аппаратных счетчиков для профилирования потоков. Конфигурация счетчика оборудования по умолчанию, которая существует после запуска системы и перед первоначальным вызовом KeSetHardwareCounterConfiguration , является пустой конфигурацией.

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

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

Чтобы определить, включено ли профилирование потоков для данного потока, вызовите функцию QueryThreadProfiling .

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

Программное обеспечение виртуализации обычно не виртуализирует аппаратные счетчики производительности. Таким образом, счетчики производительности оборудования вряд ли будут доступны на виртуальной машине.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 7.
Целевая платформа Универсальное
Верхняя часть ntddk.h (включая Ntddk.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также раздел

Справочник по профилированию счетчиков оборудования

HARDWARE_COUNTER

HalAllocateHardwareCounters

HalFreeHardwareCounters

KeQueryHardwareCounterConfiguration