Функция KeGetCurrentProcessorNumber (ntddk.h)
Подпрограмма KeGetCurrentProcessorNumber возвращает назначенный системой номер текущего процессора, на котором выполняется вызывающий объект.
Синтаксис
ULONG KeGetCurrentProcessorNumber();
Возвращаемое значение
KeGetCurrentProcessorNumber возвращает значение ULONG, представляющее обработчик, на котором в настоящее время запущен вызывающий объект.
Замечания
KeGetCurrentProcessorNumber можно вызвать для отладки использования спин-блокировки на компьютерах SMP во время разработки драйверов. Драйвер также может вызывать KeGetCurrentProcessorNumber, если он поддерживает некоторые данные на процессор и пытается сократить количество конфликтов в строке кэша.
Число процессоров на компьютере SMP — это отсчитываемое от нуля значение.
Windows 7 и более поздних версий групп обработчиков Windows. Драйверы, предназначенные для обработки сведений о группах процессоров, должны использовать подпрограмму KeGetCurrentProcessorNumberEx, которая указывает группу процессоров вместо KeGetCurrentProcessorNumber. Однако реализация KeGetCurrentProcessorNumber в Windows 7 и более поздних версиях Windows обеспечивает совместимость драйверов, написанных для более ранних версий Windows. В этой реализации KeGetCurrentProcessorNumber возвращает номер процессора относительно группы, если вызывающий объект работает на процессоре в группе 0, что совместимо с поведением этой подпрограммы в более ранних версиях Windows, которые не поддерживают группы обработчиков. Если вызывающий объект работает на процессоре в любой группе, отличной от группы 0, эта подпрограмма возвращает число, которое меньше числа процессоров в группе 0. Это поведение гарантирует, что возвращаемое значение меньше возвращаемого значения подпрограммы KeQueryActiveProcessorCount.
Если вызов KeGetCurrentProcessorNumber происходит в IRQL <= APC_LEVEL, то между инструкциями может произойти переключение процессора. Следовательно, вызывающие KeGetCurrentProcessorNumber обычно выполняются в IRQL >= DISPATCH_LEVEL.