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 值中指定的至少一个处理器处于活动状态。
如果不满足上述任一条件,则对 KeSetSystemAffinityThreadEx 的调用不起作用。

Windows 7 及更高版本的 Windows 支持处理器组。 旨在处理处理器组相关信息的驱动程序应使用 KeSetSystemGroupAffinityThread 例程,该例程指定处理器组,而不是不指定处理器组的 KeSetSystemAffinityThreadEx。 但是,在 Windows 7 和更高版本的 Windows 中实现 KeSetSystemAffinityThreadEx 为早期版本的 Windows(不支持处理器组)编写的驱动程序提供兼容性。 在此实现中, KeSetSystemAffinityThreadEx 将线程分配给组 0,并使用关联掩码在此组中指定线程可运行的一组逻辑处理器。 例程返回上一个组相对关联掩码,但不返回上一个组。

如果在 IRQL <= APC_LEVEL 调用 KeSetSystemAffinityThreadEx,并且调用成功,则新的关联掩码将立即生效。 当调用返回时,调用线程已在新的关联掩码中指定的处理器上运行。 如果在 IRQL = DISPATCH_LEVEL 调用 KeSetSystemAffinityThreadEx ,并且调用成功,则挂起的处理器更改将推迟到调用方将 IRQL 降低到以下DISPATCH_LEVEL。

要求

要求
最低受支持的客户端 在 Windows Vista 和更高版本的 Windows 中可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (请参阅“备注”部分) 。

另请参阅

KAFFINITY

KeRevertToUserAffinityThreadEx

KeSetSystemAffinityThread

KeSetSystemGroupAffinityThread