KeQueryActiveProcessors 函式 (wdm.h)
KeQueryActiveProcessors 例程會傳回目前使用中處理器的位掩碼。
語法
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。 KeNumberProcessors 不會出現在從 Windows Vista SP1 開始的 WDK 版本的 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 開始提供。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、 Ntddk.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | 請參閱一節。 |
DDI 合規性規則 | HwStorPortProhibitedDIs(storport),IrqlKeApcLte1(wdm) |