KeQueryActiveProcessors-Funktion (ntddk.h)

Die KeQueryActiveProcessors-Routine gibt eine Bitmaske der derzeit aktiven Prozessoren zurück.

Syntax

KAFFINITY KeQueryActiveProcessors();

Rückgabewert

KeQueryActiveProcessors gibt einen KAFFINITY-Wert zurück, der die Gruppe der derzeit aktiven Prozessoren darstellt.

Hinweise

Aufrufer können nicht davon ausgehen, dass KeQueryActiveProcessors Prozessoren Bits nacheinander zuordnet oder dass die Routine bei jedem Aufruf konsistent dieselbe Zuordnung verwendet. Die einzige gültige Verwendung für den Rückgabewert besteht darin, die Anzahl der aktiven Prozessoren durch Zählen der Anzahl der festgelegten Bits zu bestimmen.

Aufrufer müssen sich auch darüber im Klaren sein, dass sich der von KeQueryActiveProcessors zurückgegebene Wert während der Laufzeit unter Windows-Versionen ändern kann, die hot-add CPU-Funktionen unterstützen.

Windows 7 und höhere Versionen von Windows unterstützen Prozessorgruppen. Treiber, die für die Verarbeitung von Informationen zu Prozessorgruppen konzipiert sind, sollten die KeQueryGroupAffinity-Routine verwenden, die eine Prozessorgruppe anstelle von KeQueryActiveProcessors angibt, was nicht der Fall ist. Die Implementierung von KeQueryActiveProcessors in Windows 7 und höheren Versionen von Windows bietet jedoch Kompatibilität für Treiber, die für frühere Versionen von Windows geschrieben wurden, die keine Prozessorgruppen unterstützen. In dieser Implementierung gibt KeQueryActiveProcessors eine Affinitätsmaske zurück, die den Satz aktiver logischer Prozessoren in Gruppe 0 angibt.

In Windows Vista und höheren Versionen von Windows kann diese Routine in jedem IRQL aufgerufen werden. In Windows Server 2003 und früheren Versionen von Windows muss diese Routine jedoch unter IRQL <= APC_LEVEL aufgerufen werden.

Die Kernelvariable KeNumberProcessors ist in Windows Vista mit Service Pack 1 (SP1), Windows Server 2008 und höheren Versionen von Windows veraltet. KeNumberProcessors wird in WDK-Headern für WDK-Releases ab Windows Vista SP1 nicht angezeigt. Die Variable wird jedoch weiterhin aus dem Kernel exportiert, sodass treiber, die für frühere Plattformen erstellt wurden, nicht unterbrochen werden.

Windows Server 2008 umfasst Unterstützung für dynamische Hardwarepartitionierung (DHP) in Windows Datacenter und Enterprise Edition SKUs. Als Teil von DHP unterstützt Windows Server 2008 das Hinzufügen von CPUs zur Laufzeit. In einer CPU-Umgebung mit heißer Cpu bleibt die Anzahl der Prozessoren während der Laufzeit möglicherweise nicht konstant.

Dementsprechend muss in Windows Server 2008 Code, der die Anzahl der Prozessoren bestimmen kann, KeQueryActiveProcessors anstelle direkter Verweise auf die Kernelvariable KeNumberProcessors verwenden.

Überprüfen Sie alle Code, der derzeit auf KeNumberProcessors verweist, um sicherzustellen, dass änderungen an der CPU-Anzahl in CPU-Umgebungen mit heißer Erweiterung berücksichtigt werden.

Sie können das PNPCPU-Tool verwenden, um das Hinzufügen einer CPU zu Testzwecken zu simulieren.

#if (NTDDI_VERSION >= NTDDI_VISTA)
extern NTSYSAPI volatile CCHAR KeNumberProcessors;
#else
#if (NTDDI_VERSION >= NTDDI_WINXP)
extern NTSYSAPI CCHAR KeNumberProcessors;
#else
extern PCCHAR KeNumberProcessors;
#endif
#endif

Ab Windows XP ist KeNumberProcessors ein ganzzahliger 8-Bit-Wert, der die Anzahl der Prozessoren auf der Plattform angibt. In früheren Versionen von Windows ist KeNumberProcessors ein Zeiger auf einen ganzzahligen 8-Bit-Wert, der die Anzahl der Prozessoren auf der Plattform angibt.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Universell
Header ntddk.h (einschließlich Wdm.h, Ntddk.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Weitere Informationen finden Sie im Abschnitt mit den Hinweisen.
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlKeApcLte1(wdm)

Weitere Informationen

KeQueryActiveProcessorCount

KeQueryGroupAffinity