Funzione KeQueryActiveProcessors (ntddk.h)

La routine KeQueryActiveProcessors restituisce una maschera bit dei processori attualmente attivi.

Sintassi

KAFFINITY KeQueryActiveProcessors();

Valore restituito

KeQueryActiveProcessors restituisce un valore KAFFINITY che rappresenta il set di processori attualmente attivi.

Commenti

I chiamanti non possono presupporre che KeQueryActiveProcessors esegue il mapping dei processori a bit consecutivamente o che la routine usa in modo coerente lo stesso mapping ogni volta che viene chiamato. L'unico uso valido per il valore restituito consiste nel determinare il numero di processori attivi conteggiando il numero di bit impostati.

I chiamanti devono essere consapevoli anche che il valore restituito da KeQueryActiveProcessors può cambiare durante il runtime nelle versioni di Windows che supportano funzionalità CPU ad aggiunta frequente.

Windows 7 e versioni successive dei gruppi di processori di supporto di Windows. I driver progettati per gestire le informazioni sui gruppi di processori devono usare la routine KeQueryGroupAffinity , che specifica un gruppo di processori, anziché KeQueryActiveProcessors, che non è. Tuttavia, l'implementazione di KeQueryActiveProcessors in Windows 7 e versioni successive di Windows offre la compatibilità per i driver scritti per le versioni precedenti di Windows, che non supportano i gruppi di processori. In questa implementazione KeQueryActiveProcessors restituisce una maschera di affinità che specifica il set di processori logici attivi nel gruppo 0.

In Windows Vista e versioni successive di Windows, questa routine può essere chiamata in qualsiasi IRQL. Tuttavia, in Windows Server 2003 e versioni precedenti di Windows, questa routine deve essere chiamata in IRQL <= APC_LEVEL.

La variabile kernel KeNumberProcessors è obsoleta in Windows Vista con Service Pack 1 (SP1), Windows Server 2008 e versioni successive di Windows. KeNumberProcessors non viene visualizzato nelle intestazioni WDK per le versioni WDK a partire da Windows Vista SP1; tuttavia, la variabile viene ancora esportata dal kernel, quindi i driver compilati per le piattaforme precedenti non interromperanno

Windows Server 2008 include il supporto per il partizionamento hardware dinamico (DHP) in Windows Datacenter e edizione Enterprise SKU. Come parte di DHP, Windows Server 2008 supporta l'aggiunta frequente di CPU in fase di esecuzione. In un ambiente CPU ad accesso frequente, il numero di processori potrebbe non rimanere costante durante il runtime.

Di conseguenza, in Windows Server 2008, il codice che può determinare il numero di processori deve usare KeQueryActiveProcessors anziché riferimenti diretti alla variabile kernel , KeNumberProcessors.

Esaminare qualsiasi codice che attualmente fa riferimento a KeNumberProcessors per assicurarsi che sia in grado di soddisfare le modifiche apportate al conteggio della CPU negli ambienti cpu ad accesso frequente.

È possibile usare lo strumento PNPCPU per simulare l'aggiunta di una CPU a scopo di 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

A partire da Windows XP, KeNumberProcessors è un valore intero a 8 bit che indica il numero di processori nella piattaforma. Nelle versioni precedenti di Windows , KeNumberProcessors è un puntatore a un valore intero a 8 bit che indica il numero di processori nella piattaforma.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Universale
Intestazione ntddk.h (include Wdm.h, Ntddk.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Vedere La sezione Osservazioni.
Regole di conformità DDI HwStorPortProhibitedDDDIs(storport), IrqlKeApcLte1(wdm)

Vedi anche

KeQueryActiveProcessorCount

KeQueryGroupAffinity