KeSetSystemAffinityThreadEx 函数 (wdm.h)

KeSetSystemAffinityThreadEx 例程设置当前线程的系统相关性。

语法

KAFFINITY KeSetSystemAffinityThreadEx(
  [in] KAFFINITY Affinity
);

参数

[in] Affinity

KAFFINITY类型变量,用于指定当前线程的新系统相关性。

返回值

KeSetSystemAffinityThreadEx 返回当前线程以前的系统相关性,或返回零,以指示没有以前的系统相关性。

言论

KeSetSystemAffinityThreadEx 更改当前线程的关联掩码。 关联掩码标识一组处理器,线程可以运行。 如果成功,该例程会将线程计划在此集中的处理器上运行。

KeSetSystemAffinityThreadEx 的调用方应保存返回值,稍后将此值传递给 KeRevertToUserAffinityThreadEx 例程,以还原以前的关联掩码。

在多处理器系统中,在用户模式线程上下文中运行的内核模式驱动程序例程可能需要调用 KeSetSystemAffinityThreadEx 来临时更改线程的关联掩码。 在例程退出之前,它应调用 KeRevertToUserAffinityThreadEx,将线程的关联掩码还原到其原始值。

术语 用户关联 是指用户模式线程的原始相关性。 内核模式驱动程序设置的相关性称为 系统相关性。 如果调用 KeSetSystemAffinityThreadEx 将线程的用户关联替换为系统相关性,则调用将返回零。 稍后,驱动程序通过调用 KeRevertToUserAffinityThreadEx 并将此返回值 (零)作为 Affinity 值来还原用户相关性。

此外,需要特定关联掩码的内核模式驱动程序例程可能会调用另一个需要不同地缘掩码的内核模式例程。 每个例程都可以调用 KeSetSystemAffinityThreadEx 来设置新的地缘掩码,然后在返回之前调用 KeRevertToUserAffinityThreadEx 以还原以前的关联掩码。

KeSetSystemAffinityThreadEx 例程仅在以下两个都为 true 时才将当前线程的关联掩码更改为 地缘 值:

  • 相关性 值有效(即仅设置与逻辑处理器对应的掩码位)。
  • 相关性 值中指定的至少一个处理器处于活动状态。
如果未满足上述任一条件,则调用 KeSetSystemAffinityThreadEx 不起作用。

Windows 7 及更高版本的 Windows 支持处理器组。 设计用于处理处理器组信息的驱动程序应使用 KeSetSystemGroupAffinityThread 例程,该例程指定处理器组,而不是 KeSetSystemAffinityThreadEx,后者不指定该例程。 但是,在 Windows 7 及更高版本中实现 KeSetSystemAffinityThreadEx 为早期版本的 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 (请参阅“备注”部分)。

另请参阅

KAFFINITY

KeRevertToUserAffinityThreadEx

KeSetSystemAffinityThread

KeSetSystemGroupAffinityThread