Função KeQueryActiveProcessors (ntddk.h)
A rotina KeQueryActiveProcessors retorna uma máscara de bits dos processadores ativos no momento.
Sintaxe
KAFFINITY KeQueryActiveProcessors();
Valor de retorno
KeQueryActiveProcessors retorna um valor KAFFINITY que representa o conjunto de processadores ativos no momento.
Observações
Os chamadores não podem assumir que KeQueryActiveProcessors mapeia processadores para bits consecutivamente ou que a rotina usa consistentemente o mesmo mapeamento sempre que é chamada. O único uso válido para o valor retornado é determinar o número de processadores ativos contando o número de bits definidos.
Os chamadores também devem estar cientes de que o valor retornado por KeQueryActiveProcessors pode ser alterado durante o runtime em versões do Windows que dão suporte à funcionalidade de CPU de adição frequente.
O Windows 7 e versões posteriores do Windows dão suporte a grupos de processadores. Os drivers projetados para lidar com informações sobre grupos de processadores devem usar a rotina KeQueryGroupAffinity, que especifica um grupo de processadores, em vez de KeQueryActiveProcessors, o que não acontece. No entanto, a implementação de KeQueryActiveProcessors no Windows 7 e versões posteriores do Windows fornece compatibilidade para drivers que foram gravados para versões anteriores do Windows, que não dão suporte a grupos de processadores. Nesta implementação, KeQueryActiveProcessors retorna uma máscara de afinidade que especifica o conjunto de processadores lógicos ativos no grupo 0.
No Windows Vista e versões posteriores do Windows, essa rotina pode ser chamada em qualquer IRQL. No entanto, no Windows Server 2003 e versões anteriores do Windows, essa rotina deve ser chamada no IRQL <= APC_LEVEL.
A variável KeNumberProcessors kernel é obsoleta no Windows Vista com Service Pack 1 (SP1), Windows Server 2008 e versões posteriores do Windows. KeNumberProcessors não aparece em cabeçalhos do WDK para versões do WDK começando com o Windows Vista SP1; no entanto, a variável ainda é exportada do kernel, portanto, os drivers criados para plataformas anteriores não serão interrompidos
O Windows Server 2008 inclui suporte para DHP (Dynamic Hardware Partitioning) nos SKUs do Windows Datacenter e Enterprise Edition. Como parte do DHP, o Windows Server 2008 dá suporte à adição frequente de CPUs no runtime. Em um ambiente de CPU de adição frequente, o número de processadores pode não permanecer constante durante o runtime.
Assim, no Windows Server 2008, o código que pode determinar o número de processadores deve usar KeQueryActiveProcessors em vez de referências diretas à variável kernel, KeNumberProcessors.
Examine qualquer código que faça referência a KeNumberProcessors para garantir que ele acomode as alterações na contagem de CPU em ambientes de CPU de adição frequente.
Você pode usar a ferramenta PNPCPU para simular a adição frequente de uma CPU para fins de teste.
#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
Começando com o Windows XP, KeNumberProcessors é um valor inteiro de 8 bits que indica o número de processadores na plataforma. Nas versões anteriores do Windows, KeNumberProcessors é um ponteiro para um valor inteiro de 8 bits que indica o número de processadores na plataforma.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Disponível a partir do Windows 2000. |
da Plataforma de Destino | Universal |
cabeçalho | ntddk.h (inclua Wdm.h, Ntddk.h) |
biblioteca | NtosKrnl.lib |
de DLL | NtosKrnl.exe |
IRQL | Consulte a seção Comentários. |
regras de conformidade de DDI | HwStorPortProhibitedDIs(storport), IrqlKeApcLte1(wdm) |