Partager via


KeQueryActiveProcessors, fonction (wdm.h)

La routine KeQueryActiveProcessors retourne un masque de bits des processeurs actifs.

Syntaxe

KAFFINITY KeQueryActiveProcessors();

Valeur de retour

KeQueryActiveProcessors retourne une valeur KAFFINITY qui représente l’ensemble des processeurs actuellement actifs.

Remarques

Les appelants ne peuvent pas supposer que KeQueryActiveProcessors mappe les processeurs à des bits consécutivement, ou que la routine utilise systématiquement 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 la fonctionnalité d’ajout à chaud de processeur.

Windows 7 et versions ultérieures de Windows prennent en charge les groupes de processeurs. Les pilotes conçus pour gérer les informations sur les groupes de processeurs doivent utiliser la routine KeQueryGroupAffinity , qui spécifie un groupe de processeurs, au lieu de KeQueryActiveProcessors, ce qui n’est pas le cas. Toutefois, l’implémentation de KeQueryActiveProcessors dans Windows 7 et versions ultérieures de Windows fournit la compatibilité pour les pilotes qui ont été écrits pour des 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 des 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 IRQL. Toutefois, dans Windows Server 2003 et les versions antérieures de Windows, cette routine doit être appelée à l’adresse IRQL <= APC_LEVEL.

La variable du noyau KeNumberProcessors est obsolète dans Windows Vista avec Service Pack 1 (SP1), Windows Server 2008 et les versions ultérieures de Windows. KeNumberProcessors n’apparaît pas dans les en-têtes WDK pour les versions WDK commençant par 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 s’arrêtent pas

Windows Server 2008 prend en charge le partitionnement matériel dynamique (DHP) dans Windows Datacenter et Êdition Entreprise références SKU. 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 d’ajout à chaud de processeurs, le nombre de processeurs peut ne pas rester constant pendant l’exécution.

Par conséquent, 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 fait actuellement référence à KeNumberProcessors pour vous assurer qu’il prend en charge les modifications apportées au nombre de processeurs dans les environnements d’ajout à chaud d’UC.

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.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 2000.
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntddk.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Consultez la section Notes.
Règles de conformité DDI HwStorPortProhibitedDDIs(storport), IrqlKeApcLte1(wdm)

Voir aussi

KeQueryActiveProcessorCount

KeQueryGroupAffinity