Функция KeQueryActiveProcessors (ntddk.h)

Подпрограмма KeQueryActiveProcessors возвращает битовую маску текущих активных процессоров.

Синтаксис

KAFFINITY KeQueryActiveProcessors();

Возвращаемое значение

KeQueryActiveProcessors возвращает значение KAFFINITY , представляющее набор активных в настоящее время процессоров.

Комментарии

Вызывающие операторы не могут предполагать, что KeQueryActiveProcessors сопоставляет процессоры с битами последовательно или что подпрограмма постоянно использует одно и то же сопоставление при каждом вызове. Единственным допустимым способом использования возвращаемого значения является определение количества активных процессоров путем подсчета количества заданных битов.

Вызывающие также должны знать, что значение, возвращаемое KeQueryActiveProcessors , может измениться во время выполнения в версиях Windows, поддерживающих функцию горячего добавления ЦП.

Windows 7 и более поздние версии Windows поддерживают группы процессоров. Драйверы, предназначенные для обработки сведений о группах процессоров, должны использовать подпрограмму KeQueryGroupAffinity , которая задает группу процессоров, а не KeQueryActiveProcessors, которая не использует. Однако реализация KeQueryActiveProcessors в Windows 7 и более поздних версиях Windows обеспечивает совместимость драйверов, написанных для более ранних версий Windows, которые не поддерживают группы процессоров. В этой реализации KeQueryActiveProcessors возвращает маску сходства, указывающую набор активных логических процессоров в группе 0.

В Windows Vista и более поздних версиях Windows эту подпрограмму можно вызвать в любом IRQL. Однако в Windows Server 2003 и более ранних версиях Windows эта подпрограмма должна вызываться по адресу IRQL <= APC_LEVEL.

Переменная ядра KeNumberProcessors устарела в Windows Vista с пакетом обновления 1 (SP1), Windows Server 2008 и более поздних версий Windows. KeNumberProcessors не отображается в заголовках WDK для выпусков WDK, начиная с Windows Vista с пакетом обновления 1 (SP1); однако переменная по-прежнему экспортируется из ядра, поэтому драйверы, созданные для более ранних платформ, не будут работать

Windows Server 2008 включает поддержку динамического аппаратного секционирования (DHP) в Windows Datacenter и выпуск Enterprise SKU. В рамках DHP Windows Server 2008 поддерживает горячее добавление ЦП во время выполнения. В среде ЦП с горячим добавлением количество процессоров может не оставаться постоянным во время выполнения.

Соответственно, в Windows Server 2008 код, который может определить количество процессоров, должен использовать KeQueryActiveProcessors вместо прямых ссылок на переменную ядра KeNumberProcessors.

Просмотрите любой код, который в настоящее время ссылается на KeNumberProcessors , чтобы убедиться, что он учитывает изменения в количестве ЦП в средах с горячим добавлением.

Средство PNPCPU можно использовать для имитации горячего добавления ЦП в целях тестирования.

#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

Начиная с Windows XP , KeNumberProcessors — это 8-битовое целое значение, указывающее количество процессоров на платформе. В более ранних версиях Windows KeNumberProcessors является указателем на 8-битовое целочисленное значение, указывающее количество процессоров на платформе.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть ntddk.h (включая Wdm.h, Ntddk.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL См. раздел "Примечания".
Правила соответствия DDI HwStorPortProhibitedDIs(storport), IrqlKeApcLte1(wdm)

См. также раздел

KeQueryActiveProcessorCount

KeQueryGroupAffinity