KeSetSystemAffinityThreadEx 函式 (wdm.h)
KeSetSystemAffinityThreadEx 例程會設定目前線程的系統親和性。
語法
KAFFINITY KeSetSystemAffinityThreadEx(
[in] KAFFINITY Affinity
);
參數
[in] Affinity
KAFFINITY型別變數,指定目前線程的新系統親和性。
傳回值
KeSetSystemAffinityThreadEx 會傳回目前線程的前一個系統親和性,或傳回零,表示沒有先前的系統親和性。
言論
KeSetSystemAffinityThreadEx 變更目前線程的親和性遮罩。 親和性遮罩會識別線程可執行的一組處理器。 如果成功,例程會將線程排程在此集合中的處理器上執行。
KeSetSystemAffinityThreadEx 的呼叫端應儲存傳回值,稍後將此值傳遞至 KeRevertToUserAffinityThreadEx 例程,以還原先前的同質遮罩。
在多處理器系統中,在使用者模式線程內容中執行的內核模式驅動程式例程可能需要呼叫 KeSetSystemAffinityThreadEx,以暫時變更線程的親和性遮罩。 在例程結束之前,它應該呼叫 KeRevertToUserAffinityThreadEx,將線程的親和性遮罩還原為其原始值。
用戶親和性一詞 是指使用者模式線程的原始親和性。 由內核模式驅動程式設定的親和性稱為 系統親和性。 如果呼叫 KeSetSystemAffinityThreadEx 會以系統親和性取代線程的用戶親和性,呼叫會傳回零。 稍後,驅動程式會藉由呼叫 KeRevertToUserAffinityThreadEx 並傳遞此傳回值 (零)作為 Affinity 值來還原使用者親和性。
此外,需要特定同質遮罩的核心模式驅動程式例程可能會呼叫另一個需要不同同質遮罩的核心模式例程。 每個例程都可以呼叫 KeSetSystemAffinityThreadEx 來設定新的親和性遮罩,然後呼叫 KeRevertToUserAffinityThreadEx,以在傳回之前還原先前的親和性遮罩。
KeSetSystemAffinityThreadEx 例程只會將目前線程的親和性遮罩變更為 Affinity 值,前提是下列兩者都成立:
- Affinity 值有效(也就是說,只會設定對應至邏輯處理器的遮罩位)。
- Affinity 值中指定的至少一個處理器為使用中。
Windows 7 和更新版本的 Windows 支援處理器群組。 設計來處理處理器群組相關信息的驅動程式應該使用 KeSetSystemGroupAffinityThread 例程,指定處理器群組,而不是 KeSetSystemAffinityThreadEx,但不會。 不過,KeSetSystemAffinityThreadEx 在 Windows 7 和更新版本中的實作,可為為舊版 Windows 所撰寫的驅動程式提供相容性,這些驅動程式不支援處理器群組。 在此實作中,KeSetSystemAffinityThreadEx 將線程指派給群組 0,並使用親和性遮罩來指定此群組中可執行線程的一組邏輯處理器。 例程會傳回上一個群組相對親和性遮罩,但不會傳回上一個群組。
如果在 IRQL <= APC_LEVEL 呼叫 KeSetSystemAffinityThreadEx,而且呼叫成功,新的同質遮罩會立即生效。 當呼叫傳回時,呼叫線程已經在新同質遮罩中指定的處理器上執行。 如果在 IRQL = DISPATCH_LEVEL呼叫 KeSetSystemAffinityThreadEx,而且呼叫成功,則擱置處理器變更會延遲到呼叫端降低低於DISPATCH_LEVEL的 IRQL 為止。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 適用於 Windows Vista 和更新版本的 Windows。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (請參閱一節)。 |