KeRevertToUserGroupAffinityThread 函数 (wdm.h)
KeRevertToUserGroupAffinityThread 例程将调用线程的组关联还原到创建线程时的原始值。
语法
void KeRevertToUserGroupAffinityThread(
[in] PGROUP_AFFINITY PreviousAffinity
);
参数
[in] PreviousAffinity
指向要还原的组相关性的指针。 此参数指向包含组号和地缘掩码的 GROUP_AFFINITY 结构。 相关性掩码指定用户线程可以运行的逻辑处理器集。
返回值
没有
言论
此例程更改调用线程的组号和组相对相关性掩码。 组号和地缘掩码标识线程可对其运行的一组处理器。 如果成功,该例程会将线程计划在此集中的处理器上运行。
PreviousAffinity 参数指向一个 GROUP_AFFINITY 结构,该结构指定线程的新组号(组 成员)和地缘掩码(掩码 成员)。 如果 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,并且调用成功,则新的(还原)组相关性将立即生效。 调用返回时,调用线程已在新组相关性中指定的处理器上运行。 如果在 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 (请参阅“备注”部分)。 |