KeRevertToUserGroupAffinityThread 函式 (wdm.h)
KeRevertToUserGroupAffinityThread 例程會在建立線程時,將呼叫線程的群組親和性還原為其原始值。
語法
void KeRevertToUserGroupAffinityThread(
[in] PGROUP_AFFINITY PreviousAffinity
);
參數
[in] PreviousAffinity
要還原之群組親和性的指標。 此參數指向包含群組編號和親和性遮罩的 GROUP_AFFINITY 結構。 affinity mask 會指定用戶線程可執行的邏輯處理器集。
傳回值
沒有
言論
此例程會變更呼叫線程的組號和群組相對親和性遮罩。 群組編號和同質遮罩會識別線程可執行的一組處理器。 如果成功,例程會將線程排程在此集合中的處理器上執行。
PreviousAffinity 參數指向 GROUP_AFFINITY 結構,該結構會指定線程的新組號(Group 成員)和親和性遮罩(Mask 成員)。 如果 PreviousAffinity->Mask 為非零,KeRevertToUserGroupAffinityThread 會將呼叫線程的組號和親和性遮罩設定為 結構中的值。 如果 PreviousAffinity->Mask 為零,則例程會在線程初始化時,將群組編號和親和性遮罩還原為其原始值。
一個進程一次可以有一個以上的群組的親和性。 不過,線程隨時只能指派給一個群組,而且該群組一律位於線程進程的同質中。
線程可以藉由呼叫 KeSetSystemGroupAffinityThread 例程來變更其指派的群組。 在呼叫 KeSetSystemGroupAffinityThread之後,線程可以藉由呼叫 KeRevertToUserGroupAffinityThread來還原線程建立時的原始群組親和性。
建立線程之後,除非線程第一次呼叫 KeSetSystemGroupAffinityThread,否則 對 KeRevertToUserGroupAffinityThread 的呼叫沒有作用(也就是線程的組號和親和性遮罩保持不變)。 在呼叫 KeRevertToUserGroupAffinityThread之後,KeRevertToUserGroupAffinityThread 的第二次呼叫,除非線程第一次呼叫 keSetSystemGroupAffinityThread 。
例程只會將群組編號和親和性遮罩變更為 *PreviousAffinity 中指定的值, 下列為 true:
- 組號有效。
- 親和性遮罩有效(也就是說,只會設定對應至群組中邏輯處理器的遮罩位)。
- 至少有一個在親和性遮罩中指定的處理器為使用中。
KeRevertToUserAffinityThreadEx相關的例程會變更呼叫線程的親和性遮罩,但此例程與 KeRevertToUserGroupAffinityThread不同,不接受組號做為輸入參數。 在 Windows 7 和更新版本的 Windows作系統中,KeRevertToUserAffinityThreadEx 假設同質遮罩是指群組 0 中的處理器,這與舊版 Windows 不支援群組的這個例程行為相容。 此行為可確保呼叫 KeRevertToUserAffinityThreadEx 的現有驅動程式,且在具有兩個或更多群組的多處理器系統中,不會正確執行任何群組導向功能。 不過,在 Windows 7 和更新版本中使用任何群組導向功能的驅動程式應該呼叫 KeRevertToUserGroupAffinityThread,而不是 KeRevertToUserAffinityThreadEx。
如果在 IRQL <= APC_LEVEL呼叫 KeRevertToUserGroupAffinityThread,而且呼叫成功,新的 (reverted) 群組親和性會立即生效。 當呼叫傳回時,呼叫線程已在新群組親和性中指定的處理器上執行。 如果在 IRQL = DISPATCH_LEVEL 呼叫 KeRevertToUserGroupAffinityThread,則會延遲擱置處理器變更,直到呼叫者降低低於DISPATCH_LEVEL的 IRQL 為止。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 適用於 Windows 7 和更新版本的 Windows。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Ntddk.h、Wdm.h、Ntddk.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (請參閱一節)。 |