Функция KeQueryActiveProcessors (wdm.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) в SKU Центра обработки данных Windows и Enterprise Edition. В рамках 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. |
целевая платформа | Всеобщий |
заголовка | wdm.h (include Wdm.h, Ntddk.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | См. раздел "Примечания". |
правил соответствия DDI | HwStorPortProhibitedDIs(storport), IrqlKeApcLte1(wdm) |