共用方式為


KeRevertToUserGroupAffinityThread 函式 (wdm.h)

KeRevertToUserGroupAffinityThread 例程會在建立線程時,將呼叫線程的群組親和性還原為其原始值。

語法

void KeRevertToUserGroupAffinityThread(
  [in] PGROUP_AFFINITY PreviousAffinity
);

參數

[in] PreviousAffinity

要還原之群組親和性的指標。 此參數指向包含組號和親和性遮罩 的GROUP_AFFINITY 結構。 親和性遮罩會指定使用者線程可執行的一組邏輯處理器。

傳回值

備註

此例程會變更呼叫線程的組號和群組相對親和性遮罩。 組號和親和性遮罩會識別線程可執行的一組處理器。 如果成功,例程會將線程排程在此集合中的處理器上執行。

PreviousAffinity 參數指向GROUP_AFFINITY結構,指定線程的群組成員 (群組成員) 和親和性遮罩 (Mask 成員) 。 如果 PreviousAffinity-Mask> 為非零值,KeRevertToUserGroupAffinityThread 會將呼叫線程的組號和親和性遮罩設定為 結構中的值。 如果 PreviousAffinity-Mask> 為零,例程會在線程初始化時,將組號和親和性遮罩還原為其原始值。

進程一次可以有一個以上的群組親和性。 不過,線程隨時只能指派給一個群組,而且該群組一律位於線程進程的親和性中。

線程可以藉由呼叫 KeSetSystemGroupAffinityThread 例程來變更其指派的群組。 在呼叫 KeSetSystemGroupAffinityThread 的一或多個呼叫之後,線程可以藉由呼叫 KeRevertToUserGroupAffinityThread 來還原線程所建立的原始群組親和性。

建立線程之後,除非線程第一次呼叫 KeSetSystemGroupAffinityThread,否則線程的組號和親和性遮罩不會變更) ,否則對 KeRevertToUserGroupAffinityThread 的呼叫不會有任何 (作用。 在呼叫 KeRevertToUserGroupAffinityThread 之後,除非線程第一次呼叫 KeSetSystemGroupAffinityThread,否則 KeRevertToUserGroupAffinityThread 的第二次呼叫不會有任何作用。

例程只會將組號和親和性遮罩變更為 *PreviousAffinity 中指定的值,前提是下列為 true:

  • 組號有效。
  • 同質遮罩是有效的 (,也就是說,只會設定對應至群組中邏輯處理器的遮罩位) 。
  • 同質遮罩中指定的至少一個處理器為使用中。
如果不符合上述任何條件, 則呼叫 KeRevertToUserGroupAffinityThread 沒有任何作用。

相關的例程 KeRevertToUserAffinityThreadEx 會變更呼叫線程的親和性遮罩,但此例程不同於 KeRevertToUserGroupAffinityThread,不接受組號做為輸入參數。 在 Windows 7 和更新版本的 Windows 操作系統中, KeRevertToUserAffinityThreadEx 假設同質遮罩是指群組 0 中的處理器,這與舊版 Windows 中不支援群組的此例程行為相容。 此行為可確保呼叫 KeRevertToUserAffinityThreadEx 的現有驅動程式,且不會在具有兩個或多個群組的多處理器系統中正確執行任何群組導向功能。 不過,在 Windows 7 和更新版本中使用任何群組導向功能的驅動程式應該呼叫 KeRevertToUserGroupAffinityThread ,而不是 KeRevertToUserAffinityThreadEx

如果在 IRQL <= APC_LEVEL呼叫 KeRevertToUserGroupAffinityThread,且呼叫成功,則新的 (還原) 群組親和性會立即生效。 當呼叫傳回時,呼叫線程已在新群組親和性中指定的處理器上執行。 如果在 IRQL = DISPATCH_LEVEL呼叫 KeRevertToUserGroupAffinityThread ,且呼叫成功,則擱置的處理器變更會延後,直到呼叫端降低下方的 IRQL DISPATCH_LEVEL為止。

規格需求

需求
最低支援的用戶端 可在 Windows 7 和更新版本的 Windows 中使用。
目標平台 Universal
標頭 wdm.h (包含 Ntddk.h、Wdm.h、Ntddk.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (请参阅一节) 。

另請參閱

GROUP_AFFINITY

KeRevertToUserAffinityThreadEx

KeSetSystemGroupAffinityThread