Función KeQueryActiveProcessors (wdm.h)

La rutina KeQueryActiveProcessors devuelve una máscara de bits de los procesadores activos actualmente.

Sintaxis

KAFFINITY KeQueryActiveProcessors();

Valor devuelto

KeQueryActiveProcessors devuelve un valor KAFFINITY que representa el conjunto de procesadores activos actualmente.

Comentarios

Los autores de llamadas no pueden suponer que KeQueryActiveProcessors asigna procesadores a bits consecutivamente o que la rutina usa de forma coherente la misma asignación cada vez que se llama. El único uso válido para el valor devuelto es determinar el número de procesadores activos contando el número de bits que se establecen.

Los autores de llamadas también deben tener en cuenta que el valor devuelto por KeQueryActiveProcessors puede cambiar durante el tiempo de ejecución en las versiones de Windows que admiten la funcionalidad de CPU de adición activa.

Windows 7 y versiones posteriores de los grupos de procesadores de soporte técnico de Windows. Los controladores diseñados para controlar la información sobre los grupos de procesadores deben usar la rutina KeQueryGroupAffinity , que especifica un grupo de procesadores, en lugar de KeQueryActiveProcessors, que no lo hace. Sin embargo, la implementación de KeQueryActiveProcessors en Windows 7 y versiones posteriores de Windows proporciona compatibilidad con controladores escritos para versiones anteriores de Windows, que no admiten grupos de procesadores. En esta implementación, KeQueryActiveProcessors devuelve una máscara de afinidad que especifica el conjunto de procesadores lógicos activos del grupo 0.

En Windows Vista y versiones posteriores de Windows, se puede llamar a esta rutina en cualquier IRQL. Sin embargo, en Windows Server 2003 y versiones anteriores de Windows, se debe llamar a esta rutina en IRQL <= APC_LEVEL.

La variable de kernel KeNumberProcessors está obsoleta en Windows Vista con Service Pack 1 (SP1), Windows Server 2008 y versiones posteriores de Windows. KeNumberProcessors no aparece en los encabezados WDK para las versiones de WDK a partir de Windows Vista SP1; sin embargo, la variable todavía se exporta desde el kernel, por lo que los controladores creados para plataformas anteriores no se interrumpirán.

Windows Server 2008 incluye compatibilidad con la creación de particiones dinámicas de hardware (DHP) en el centro de datos de Windows y Enterprise Edition SKU. Como parte de DHP, Windows Server 2008 admite la adición de CPU activas en tiempo de ejecución. En un entorno de CPU de adición activa, es posible que el número de procesadores no permanezca constante durante el tiempo de ejecución.

En consecuencia, en Windows Server 2008, el código que puede determinar el número de procesadores debe usar KeQueryActiveProcessors en lugar de referencias directas a la variable kernel, KeNumberProcessors.

Revise cualquier código que actualmente haga referencia a KeNumberProcessors para asegurarse de que admite los cambios en el recuento de CPU en entornos de CPU de adición activa.

Puede usar la herramienta PNPCPU para simular la adición activa de una CPU con fines de prueba.

#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 partir de Windows XP, KeNumberProcessors es un valor entero de 8 bits que indica el número de procesadores de la plataforma. En versiones anteriores de Windows, KeNumberProcessors es un puntero a un valor entero de 8 bits que indica el número de procesadores de la plataforma.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL vea la sección Comentarios.
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), IrqlKeApcLte1(wdm)

Consulte también

KeQueryActiveProcessorCount

KeQueryGroupAffinity