KeQueryActiveProcessors 函式 (wdm.h)

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

Syntax

KAFFINITY KeQueryActiveProcessors();

傳回值

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

備註

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

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

Windows 7 和更新版本的 Windows 支援處理器群組。 設計來處理處理器群組相關信息的驅動程序應該使用 KeQueryGroupAffinity 例程,指定處理器群組,而不是未指定處理器群組的 KeQueryActiveProcessors。 不過,Windows 7 和更新版本中 KeQueryActiveProcessors 的實作可為舊版 Windows 所撰寫的驅動程式提供相容性,這些驅動程式不支援處理器群組。 在此實作中, KeQueryActiveProcessors 會傳回親和性遮罩,指定群組 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
標頭 wdm.h (包括 Wdm.h、Ntddk.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL 請參閱一節。
DDI 合規性規則 HwStorPortProhibitedDDIs (storport) IrqlKeApcLte1 (wdm)

另請參閱

KeQueryActiveProcessorCount

KeQueryGroupAffinity