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 den Satz der aktuell aktiven Prozessoren darstellt.
Bemerkungen
Aufrufer können nicht davon ausgehen, dass KeQueryActiveProcessors Prozessoren aufeinander folgenden Bits zuordnet oder dass die Routine bei jedem Aufruf die gleiche Zuordnung verwendet. Die einzige gültige Verwendung für den Rückgabewert besteht darin, die Anzahl der aktiven Prozessoren zu ermitteln, indem die Anzahl der festgelegten Bits gezählt wird.
Aufrufer müssen auch beachten, dass der von KeQueryActiveProcessors zurückgegebene Wert während der Laufzeit in Versionen von Windows geändert werden 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 angibt, anstelle von KeQueryActiveProcessors, was nicht. 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 bei 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 KeNumberProcessors Kernelvariable 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-Versionen 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 getrennt werden.
Windows Server 2008 umfasst Unterstützung für dynamische Hardwarepartitionierung (DHP) in den WINDOWS Datacenter- und Enterprise Edition-SKUs. Im Rahmen von DHP unterstützt Windows Server 2008 das Hinzufügen von CPUs zur Laufzeit. In einer HOT-Add-CPU-Umgebung 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 von direkten Verweisen auf die Kernelvariable verwenden, KeNumberProcessors.
Überprüfen Sie alle Code, der derzeit auf KeNumberProcessors verweist,, um sicherzustellen, dass Änderungen an der CPU-Anzahl in Hot-Add-CPU-Umgebungen 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 8-Bit-Ganzzahlwert, der die Anzahl der Prozessoren auf der Plattform angibt.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Ab Windows 2000 verfügbar. |
Zielplattform- | Universal |
Header- | ntddk.h (enthalten Wdm.h, Ntddk.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | Siehe Abschnitt "Hinweise". |
DDI-Complianceregeln | HwStorPortProhibitedDDIs(storport), IrqlKeApcLte1(wdm) |