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 |