setProcessAffinityMask 函数 (winbase.h)

为指定进程的线程设置处理器关联掩码。

语法

BOOL SetProcessAffinityMask(
  [in] HANDLE    hProcess,
  [in] DWORD_PTR dwProcessAffinityMask
);

参数

[in] hProcess

要设置其关联掩码的进程句柄。 此句柄必须具有 PROCESS_SET_INFORMATION 访问权限。 有关详细信息,请参阅 进程安全性和访问权限

[in] dwProcessAffinityMask

进程的线程的关联掩码。

在具有 64 个以上的处理器的系统上,关联掩码必须在单个 处理器组中指定处理器

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

如果进程相关性掩码请求未在系统中配置的处理器,则最后一个错误代码 ERROR_INVALID_PARAMETER

在具有 64 个以上的处理器的系统上,如果调用进程包含多个处理器组中的线程,则最后一个错误代码 ERROR_INVALID_PARAMETER

注解

进程相关性掩码是位向量,其中每个位表示允许进程线程运行的逻辑处理器。 进程相关性掩码的值必须是 GetProcessAffinityMask 函数获取的系统相关性掩码值的子集。 仅允许在配置为系统的处理器上运行进程。 因此,当系统关联掩码为该处理器指定 0 位时,进程相关性掩码不能为处理器指定 1 位。

进程相关性由任何子进程或新实例化本地进程继承。

请勿在 DLL 中调用 SetProcessAffinityMask ,该 DLL 可能由你自己的进程调用。

在具有 64 个以上的处理器的系统上, SetProcessAffinityMask 函数可用于仅针对单个 处理器组中具有线程的进程设置进程相关性掩码。 使用 SetThreadAffinityMask 函数为多个组中的各个线程设置相关性掩码。 这实际上改变了进程的组分配。

从 Windows 11 和 Windows Server 2022 开始,默认情况下,在具有 64 个以上的处理器、进程和线程相关性的系统上跨所有处理器组的所有处理器。 如果调用进程包含多个处理器组中的线程, 则 SetProcessAffinityMask 函数不会 (返回零 ,ERROR_INVALID_PARAMETER最后 一个错误代码) 如果进程显式设置进程外部的一个或多个线程的 相关性,则) 。

要求

   
最低受支持的客户端 Windows XP [桌面应用|UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用|UWP 应用]
目标平台 Windows
标头 winbase.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

CreateProcess

GetProcessAffinityMask

多个处理器

进程和线程函数

进程

处理器组

SetThreadAffinityMask