Función KeSetHardwareCounterConfiguration (ntddk.h)

La rutina KeSetHardwareCounterConfiguration especifica una lista de contadores de hardware que se usarán para la generación de perfiles de subprocesos.

Sintaxis

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

Parámetros

[in] CounterArray

Puntero a una matriz de HARDWARE_COUNTER que describe la configuración del contador de hardware que se va a usar para la generación de perfiles de subprocesos. Cada elemento de matriz es una estructura que describe un contador de hardware. Antes de que la rutina vuelva, copia el contenido de esta matriz en sus estructuras de datos internas.

[in] Count

Especifica el número de elementos de la matriz a los que apunta el parámetro CounterArray .

Valor devuelto

KeSetHardwareCounterConfiguration devuelve STATUS_SUCCESS si la llamada se realiza correctamente. Entre los posibles valores devueltos de error se incluyen los siguientes:

Código devuelto Descripción
STATUS_INVALID_PARAMETER El valor del parámetro Count supera el número máximo de contadores especificados por la constante MAX_HW_COUNTERS, que se define en el archivo de encabezado Ntddk.h.
STATUS_WMI_ALREADY_ENABLED Uno o varios de los contadores especificados en la matriz CounterArray ya están habilitados.
STATUS_NOT_IMPLEMENTED Esta rutina no se implementa para la arquitectura del procesador en la que se ejecuta el autor de la llamada.

Comentarios

En Windows 7, esta rutina solo se implementa para las arquitecturas basadas en x86, x64 y itanium. Si un autor de llamada se ejecuta en una arquitectura de procesador que no se admite, la rutina devuelve STATUS_NOT_IMPLEMENTED.

Esta rutina indica al sistema operativo qué contadores de hardware usar para la generación de perfiles de subprocesos. Llame a esta rutina solo cuando se deshabilite la generación de perfiles de subprocesos. Si la matriz CounterArray especifica los contadores de hardware que se están usando actualmente, la rutina produce un error y devuelve STATUS_WMI_ALREADY_ENABLED.

Un subproceso de aplicación puede habilitar la generación de perfiles de subprocesos para obtener un conjunto de medidas de rendimiento de los contadores de hardware de la unidad de supervisión de rendimiento (PMU) del procesador local. El sistema operativo solo admite una aplicación de generación de perfiles a la vez. No se admiten instancias simultáneas de una aplicación de generación de perfiles de subprocesos. Un subproceso puede habilitar la generación de perfiles de subprocesos para sí mismo, pero no para otros subprocesos.

Cuando se habilita la generación de perfiles de subprocesos, el sistema operativo usa los contadores de hardware especificados en la última llamada a KeSetHardwareCounterConfiguration. Cada llamada a KeSetHardwareCounterConfiguration correcta reemplaza cualquier configuración de contador de hardware que se haya establecido en una llamada anterior a KeSetHardwareCounterConfiguration .

Establezca Count = 0 para especificar una configuración de contador de hardware vacía. Esta configuración evita eficazmente el uso de contadores de hardware para la generación de perfiles de subprocesos. La configuración predeterminada del contador de hardware que existe después del inicio del sistema y antes de la llamada inicial a KeSetHardwareCounterConfiguration es una configuración vacía.

El efecto de una llamada a KeSetHardwareCounterConfiguration correcta es global. Si se genera un perfil de un subproceso en cualquier proceso, el generador de perfiles usa la configuración del contador de hardware establecida por la última llamada a KeSetHardwareCounterConfiguration. En un sistema multiprocesador, una llamada KeSetHardwareCounterConfiguration establece la configuración del contador de hardware que se usará para la generación de perfiles de subprocesos en todos los procesadores del sistema, aunque cada procesador usa su propio conjunto de contadores de hardware.

Para evitar conflictos de recursos, todos los controladores que usan recursos de contador deben usar las rutinas HalAllocateHardwareCounters y HalFreeHardwareCounters para coordinar su uso compartido de estos recursos.

Para determinar si la generación de perfiles de subprocesos está habilitada para un subproceso determinado, llame a la función QueryThreadProfiling .

Para consultar el sistema operativo para la configuración del contador de hardware que está actualmente en vigor para la generación de perfiles de subprocesos, llame a la rutina KeQueryHardwareCounterConfiguration .

Normalmente, el software de virtualización no virtualiza los contadores de rendimiento de hardware. Por lo tanto, es poco probable que los contadores de rendimiento de hardware estén disponibles en una máquina virtual.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 7.
Plataforma de destino Universal
Encabezado ntddk.h (incluya Ntddk.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Consulte también

Referencia de generación de perfiles de contadores de hardware

HARDWARE_COUNTER

HalAllocateHardwareCounters

HalFreeHardwareCounters

KeQueryHardwareCounterConfiguration