KeQueryActiveProcessors 函式 (ntddk.h)

KeQueryActiveProcessors 例程會傳回目前使用中處理器的位掩碼。

Syntax

KAFFINITY KeQueryActiveProcessors();

傳回值

KeQueryActiveProcessors 會傳回 KAFFINITY 值,代表目前作用中的處理器集合。

備註

呼叫端無法假設 KeQueryActiveProcessors 會連續將處理器對應到位,或例程在每次呼叫時一致地使用相同的對應。 傳回值的唯一有效用法是藉由計算所設定的位數目來判斷使用中處理器的數目。

呼叫端也必須注意 KeQueryActiveProcessors 所傳回的值可以在支援熱新增 CPU 功能的 Windows 版本期間變更。

Windows 7 和更新版本的 Windows 支援處理器群組。 設計來處理處理器群組相關信息的驅動程序應該使用 KeQueryGroupAffinity 例程,其會指定處理器群組,而不是 未指定的 KeQueryActiveProcessors。 不過,在 Windows 7 和更新版本的 Windows 中 實作 KeQueryActiveProcessors 可提供針對舊版 Windows 所撰寫之驅動程式的相容性,但不支援處理器群組。 在此實作中, KeQueryActiveProcessors 會傳回 affinity mask,指定群組 0 中的使用中邏輯處理器集合。

在 Windows Vista 和更新版本的 Windows 中,任何 IRQL 都可以呼叫此例程。 不過,在 Windows Server 2003 和舊版 Windows 中,必須在 IRQL <= APC_LEVEL呼叫此例程。

KeNumberProcessors 核心變數在 Windows Vista 中已過時,Service Pack 1 (SP1) 、Windows Server 2008 和更新版本的 Windows。 從 Windows Vista SP1 開始的 WDK 版本,KeNumberProcessors 不會出現在 WDK 標頭中;不過,變數仍會從核心匯出,因此針對舊版平臺建置的驅動程式將不會中斷

Windows Server 2008 包含 Windows Datacenter 和 Enterprise Edition SKU 中動態硬體分割 (DHP) 的支援。 作為 DHP 的一部分,Windows Server 2008 支援在運行時間熱新增 CPU。 在熱新增 CPU 環境中,處理器數目可能不會在運行時間維持不變。

因此,在 Windows Server 2008 中,可判斷處理器數目的程式代碼必須使用 KeQueryActiveProcessors, 而不是直接參考核心變數 KeNumberProcessors

檢閱目前參考 KeNumberProcessors 的任何程式碼,以確定它符合熱新增 CPU 環境中 CPU 計數的變更。

您可以使用 PNPCPU 工具來模擬熱新增 CPU 以供測試之用。

#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 開始提供。
目標平台 Universal
標頭 ntddk.h (包含 Wdm.h、Ntddk.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL 請參閱一節。
DDI 合規性規則 HwStorPortProhibitedDIS (storport) IrqlKeApcLte1 (wdm)

另請參閱

KeQueryActiveProcessorCount

KeQueryGroupAffinity