KeQueryActiveProcessors, fonction (wdm.h)
La routine KeQueryActiveProcessors retourne un masque de bits des processeurs actuellement actifs.
Syntaxe
KAFFINITY KeQueryActiveProcessors();
Valeur de retour
KeQueryActiveProcessors retourne une valeur KAFFINITY qui représente l’ensemble de processeurs actuellement actifs.
Remarques
Les appelants ne peuvent pas supposer que KeQueryActiveProcessors mappe les processeurs aux bits consécutifs, ou que la routine utilise de façon cohérente le même mappage chaque fois qu’elle est appelée. La seule utilisation valide pour la valeur de retour consiste à déterminer le nombre de processeurs actifs en comptant le nombre de bits définis.
Les appelants doivent également savoir que la valeur retournée par KeQueryActiveProcessors peut changer pendant l’exécution sur les versions de Windows qui prennent en charge les fonctionnalités d’ajout à chaud du processeur.
Windows 7 et versions ultérieures de groupes de processeurs de prise en charge de Windows. Les pilotes conçus pour gérer des informations sur les groupes de processeurs doivent utiliser la routine KeQueryGroupAffinity, qui spécifie un groupe de processeurs, au lieu de KeQueryActiveProcessors, ce qui ne le fait pas. Toutefois, l’implémentation de KeQueryActiveProcessors dans Windows 7 et les versions ultérieures de Windows fournit une compatibilité pour les pilotes écrits pour les versions antérieures de Windows, qui ne prennent pas en charge les groupes de processeurs. Dans cette implémentation, KeQueryActiveProcessors retourne un masque d’affinité qui spécifie l’ensemble de processeurs logiques actifs dans le groupe 0.
Dans Windows Vista et les versions ultérieures de Windows, cette routine peut être appelée à n’importe quel runtime d’intégration. Toutefois, dans Windows Server 2003 et les versions antérieures de Windows, cette routine doit être appelée au <IRQL = APC_LEVEL.
La KeNumberProcessors variable de noyau est obsolète dans Windows Vista avec Service Pack 1 (SP1), Windows Server 2008 et versions ultérieures de Windows. KeNumberProcessors n’apparaît pas dans les en-têtes WDK pour les versions WDK à partir de Windows Vista SP1 ; toutefois, la variable est toujours exportée à partir du noyau, de sorte que les pilotes créés pour les plateformes antérieures ne se décomposent pas
Windows Server 2008 inclut la prise en charge de partitionnement de matériel dynamique (DHP) dans les références SKU Windows Datacenter et Enterprise Edition. Dans le cadre de DHP, Windows Server 2008 prend en charge l’ajout à chaud de processeurs au moment de l’exécution. Dans un environnement processeur à chaud, le nombre de processeurs peut ne pas rester constant pendant l’exécution.
En conséquence, dans Windows Server 2008, le code qui peut déterminer le nombre de processeurs doit utiliser KeQueryActiveProcessors au lieu de références directes à la variable de noyau, KeNumberProcessors.
Passez en revue tout code qui référence actuellement KeNumberProcessors pour vous assurer qu’il prend en charge les modifications apportées au nombre d’UC dans les environnements d’UC à chaud.
Vous pouvez utiliser l’outil PNPCPU pour simuler l’ajout chaud d’un processeur à des fins de test.
#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
À compter de Windows XP, KeNumberProcessors est une valeur entière 8 bits qui indique le nombre de processeurs dans la plateforme. Dans les versions antérieures de Windows, KeNumberProcessors est un pointeur vers une valeur entière 8 bits qui indique le nombre de processeurs dans la plateforme.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible à partir de Windows 2000. |
plateforme cible | Universel |
d’en-tête | wdm.h (include Wdm.h, Ntddk.h) |
bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | Voir la section Remarques. |
règles de conformité DDI | HwStorPortProhibitedDDIs(storport), IrqlKeApcLte1(wdm) |