Função KeQueryActiveProcessors (wdm.h)
A rotina KeQueryActiveProcessors retorna uma máscara de bits dos processadores ativos no momento.
Sintaxe
KAFFINITY KeQueryActiveProcessors();
Retornar valor
KeQueryActiveProcessors retorna um valor KAFFINITY que representa o conjunto de processadores ativos no momento.
Comentários
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 hot-add.
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 em versões posteriores do Windows, essa rotina pode ser chamada em qualquer IRQL. No entanto, no Windows Server 2003 e em versões anteriores do Windows, essa rotina deve ser chamada em IRQL <= APC_LEVEL.
A variável de kernel KeNumberProcessors está 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 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 (Particionamento Dinâmico de Hardware) no Datacenter do Windows e SKUs de Edição Enterprise. Como parte do DHP, o Windows Server 2008 dá suporte à adição frequente de CPUs em 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 de kernel KeNumberProcessors.
Examine qualquer código que atualmente referencie KeNumberProcessors para garantir que ele acomode 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
A partir do Windows XP, KeNumberProcessors é um valor inteiro de 8 bits que indica o número de processadores na plataforma. Em 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 |
---|---|
Cliente mínimo com suporte | Disponível a partir do Windows 2000. |
Plataforma de Destino | Universal |
Cabeçalho | wdm.h (inclua Wdm.h, Ntddk.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | Consulte a seção Observações. |
Regras de conformidade de DDI | HwStorPortProhibitedDIs(storport), IrqlKeApcLte1(wdm) |