Condividi tramite


Funzione KeSetHardwareCounterConfiguration (ntddk.h)

La routine KeSetHardwareCounterConfiguration specifica un elenco di contatori hardware da usare per la profilatura dei thread.

Sintassi

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

Parametri

[in] CounterArray

Puntatore a una matrice di HARDWARE_COUNTER che descrive la configurazione del contatore hardware da usare per la profilatura dei thread. Ogni elemento matrice è una struttura che descrive un contatore hardware. Prima della restituzione della routine, il contenuto di questa matrice viene copiato nelle relative strutture di dati interne.

[in] Count

Specifica il numero di elementi nella matrice a cui punta il parametro CounterArray .

Valore restituito

KeSetHardwareCounterConfiguration restituisce STATUS_SUCCESS se la chiamata ha esito positivo. I valori restituiti di errore possibili includono quanto segue:

Codice restituito Descrizione
STATUS_INVALID_PARAMETER Il valore del parametro Count supera il numero massimo di contatori specificati dalla costante MAX_HW_COUNTERS, definita nel file di intestazione Ntddk.h.
STATUS_WMI_ALREADY_ENABLED Uno o più contatori specificati nella matrice CounterArray sono già abilitati.
STATUS_NOT_IMPLEMENTED Questa routine non viene implementata per l'architettura del processore in cui è in esecuzione il chiamante.

Commenti

In Windows 7 questa routine viene implementata solo per le architetture basate su x86, basate su x64 e basate su Itanium. Se un chiamante è in esecuzione in un'architettura del processore non supportata, la routine restituisce STATUS_NOT_IMPLEMENTED.

Questa routine indica al sistema operativo quali contatori hardware usare per la profilatura dei thread. Chiamare questa routine solo quando la profilatura dei thread è disabilitata. Se la matrice CounterArray specifica i contatori hardware attualmente in uso, la routine ha esito negativo e restituisce STATUS_WMI_ALREADY_ENABLED.

Un thread applicazione può consentire la profilatura dei thread per ottenere un set di misurazioni delle prestazioni dai contatori hardware nell'unità di monitoraggio delle prestazioni (PMU) del processore locale. Il sistema operativo supporta una sola applicazione di profilatura alla volta. Le istanze simultanee di un'applicazione di profilatura del thread non sono supportate. Un thread può abilitare la profilatura dei thread per se stessa, ma non per altri thread.

Quando la profilatura dei thread è abilitata, il sistema operativo usa i contatori hardware specificati nell'ultima chiamata a KeSetHardwareCounterConfiguration. Ogni chiamata KeSetHardwareCounterConfiguration riesce a sostituire qualsiasi configurazione del contatore hardware che potrebbe essere stata impostata in una precedente chiamata KeSetHardwareCounterConfiguration .

Impostare Count = 0 per specificare una configurazione vuota del contatore hardware. Questa configurazione impedisce in modo efficace l'uso di contatori hardware per la profilatura dei thread. La configurazione predefinita del contatore hardware esistente dopo l'avvio del sistema e prima della chiamata iniziale KeSetHardwareCounterConfiguration è una configurazione vuota.

L'effetto di una chiamata KeSetHardwareCounterConfiguration riuscita è globale. Se viene profilato un thread in un processo, il profiler usa la configurazione del contatore hardware impostata dall'ultima chiamata a KeSetHardwareCounterConfiguration. In un sistema multiprocessore, una chiamata KeSetHardwareCounterConfiguration imposta la configurazione del contatore hardware da usare per la profilatura dei thread in tutti i processori del sistema, anche se ogni processore usa il proprio set di contatori hardware.

Per evitare conflitti di risorse, tutti i driver che usano risorse contatore devono usare le routine HalAllocateHardwareCounters e HalFreeHardwareCounters per coordinare la condivisione di queste risorse.

Per determinare se la profilatura dei thread è abilitata per un determinato thread, chiamare la funzione QueryThreadProfiling .

Per eseguire una query sul sistema operativo per la configurazione del contatore hardware attualmente attiva per la profilatura dei thread, chiamare la routine KeQueryHardwareCounterConfiguration .

Il software di virtualizzazione in genere non virtualizza i contatori delle prestazioni hardware. Pertanto, è improbabile che i contatori delle prestazioni hardware siano disponibili in una macchina virtuale.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 7.
Piattaforma di destinazione Universale
Intestazione ntddk.h (include Ntddk.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Vedi anche

Informazioni di riferimento sulla profilatura dei contatori hardware

HARDWARE_COUNTER

HalAllocateHardwareCounters

HalFreeHardwareCounters

KeQueryHardwareCounterConfiguration