Freigeben über


KeSetHardwareCounterConfiguration-Funktion (ntddk.h)

Die KeSetHardwareCounterConfiguration Routine gibt eine Liste von Hardwarezählern an, die für die Threadprofilerstellung verwendet werden sollen.

Syntax

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

Parameter

[in] CounterArray

Ein Zeiger auf ein HARDWARE_COUNTER Array, das die Hardwareindikatorkonfiguration beschreibt, die für die Threadprofilerstellung verwendet werden soll. Jedes Arrayelement ist eine Struktur, die einen Hardwarezähler beschreibt. Bevor die Routine zurückkehrt, kopiert sie den Inhalt dieses Arrays in seine internen Datenstrukturen.

[in] Count

Gibt die Anzahl der Elemente im Array an, auf die der CounterArray-Parameter verweist.

Rückgabewert

KeSetHardwareCounterConfiguration gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich ist. Mögliche Fehlerrückgabewerte sind:

Rückgabecode Beschreibung
STATUS_INVALID_PARAMETER Der Wert des parameters Count überschreitet die maximale Anzahl von Zählern, die durch die MAX_HW_COUNTERS Konstante angegeben wird, die in der Headerdatei Ntddk.h definiert ist.
STATUS_WMI_ALREADY_ENABLED Mindestens ein Zähler, der im CounterArray- Array angegeben ist, ist bereits aktiviert.
STATUS_NOT_IMPLEMENTED Diese Routine ist nicht für die Prozessorarchitektur implementiert, auf der der Aufrufer ausgeführt wird.

Bemerkungen

In Windows 7 wird diese Routine nur für die x86-basierten, x64- und Itanium-basierten Architekturen implementiert. Wenn ein Aufrufer auf einer nicht unterstützten Prozessorarchitektur ausgeführt wird, gibt die Routine STATUS_NOT_IMPLEMENTED zurück.

Diese Routine teilt dem Betriebssystem mit, welche Hardwarezähler für die Threadprofilerstellung verwendet werden sollen. Rufen Sie diese Routine nur auf, wenn die Threadprofilerstellung deaktiviert ist. Wenn das CounterArray Array alle hardwarebasierten Leistungsindikatoren angibt, die derzeit verwendet werden, schlägt die Routine fehl und gibt STATUS_WMI_ALREADY_ENABLED zurück.

Ein Anwendungsthread kann die Threadprofilerstellung aktivieren, um eine Reihe von Leistungsmessungen aus den Hardwarezählern in der Leistungsüberwachungseinheit (PMU) des lokalen Prozessors abzurufen. Das Betriebssystem unterstützt jeweils nur eine Profilerstellungsanwendung. Gleichzeitige Instanzen einer Threadprofilanwendung werden nicht unterstützt. Ein Thread kann die Threadprofilerstellung für sich selbst, aber nicht für andere Threads aktivieren.

Wenn die Threadprofilerstellung aktiviert ist, verwendet das Betriebssystem die Hardwarezähler, die im letzten Aufruf von KeSetHardwareCounterConfigurationangegeben wurden. Jeder erfolgreiche KeSetHardwareCounterConfiguration Aufruf ersetzt jede Hardwarezählerkonfiguration, die in einem vorherigen KeSetHardwareCounterConfiguration Aufruf festgelegt wurde.

Legen Sie Count = 0 fest, um eine leere Hardwarezählerkonfiguration anzugeben. Diese Konfiguration verhindert effektiv die Verwendung von Hardwarezählern für die Threadprofilerstellung. Die Standardkonfiguration des Hardwarezählers, die nach dem Systemstart vorhanden ist, und vor dem anfänglichen KeSetHardwareCounterConfiguration Aufruf ist eine leere Konfiguration.

Der Effekt eines erfolgreichen KeSetHardwareCounterConfiguration Aufruf ist global. Wenn ein Thread in einem Prozess profiliert ist, verwendet der Profiler die Hardwarezählerkonfiguration, die durch den letzten Aufruf von KeSetHardwareCounterConfigurationfestgelegt wurde. In einem Multiprozessorsystem legt ein KeSetHardwareCounterConfiguration Aufruf die Hardwarezählerkonfiguration fest, die für die Threadprofilerstellung für alle Prozessoren im System verwendet werden soll, obwohl jeder Prozessor einen eigenen Satz von Hardwarezählern verwendet.

Um Ressourcenkonflikte zu vermeiden, sollten alle Treiber, die Leistungsindikatorenressourcen verwenden, die HalAllocateHardwareCounters und HalFreeHardwareCounters Routinen verwenden, um ihre Freigabe dieser Ressourcen zu koordinieren.

Um festzustellen, ob die Threadprofilerstellung für einen bestimmten Thread aktiviert ist, rufen Sie die QueryThreadProfiling--Funktion auf.

Rufen Sie die KeQueryHardwareCounterConfiguration Routine auf, um das Betriebssystem für die Hardwarezählerkonfiguration abzufragen, die derzeit für die Threadprofilerstellung wirksam ist.

Virtualisierungssoftware virtualisiert in der Regel keine Hardwareleistungsindikatoren. Daher sind Hardwareleistungsindikatoren wahrscheinlich nicht auf einem virtuellen Computer verfügbar.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar ab Windows 7.
Zielplattform- Universal
Header- ntddk.h (include Ntddk.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= APC_LEVEL

Siehe auch

Hardwarezählerprofilreferenz

HARDWARE_COUNTER

HalAllocateHardwareCounters

HalFreeHardwareCounters

KeQueryHardwareCounterConfiguration