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 |