GetProcessAffinityMask 函数 (winbase.h)

检索指定进程的进程关联掩码和系统的系统关联掩码。

语法

BOOL GetProcessAffinityMask(
  [in]  HANDLE     hProcess,
  [out] PDWORD_PTR lpProcessAffinityMask,
  [out] PDWORD_PTR lpSystemAffinityMask
);

参数

[in] hProcess

需要关联掩码的进程句柄。

此句柄必须具有 PROCESS_QUERY_INFORMATIONPROCESS_QUERY_LIMITED_INFORMATION 访问权限。 有关详细信息,请参阅 进程安全性和访问权限

Windows Server 2003 和 Windows XP: 句柄必须具有 PROCESS_QUERY_INFORMATION 访问权限。

[out] lpProcessAffinityMask

指向接收指定进程的关联掩码的变量的指针。

[out] lpSystemAffinityMask

指向接收系统的关联掩码的变量的指针。

返回值

如果函数成功,则返回值为非零值,并且函数将 lpProcessAffinityMasklpSystemAffinityMask 指向的变量设置为适当的相关性掩码。

在处理器超过 64 个的系统上,如果调用进程的线程位于单个 处理器组中,则函数会将 lpProcessAffinityMasklpSystemAffinityMask 指向的变量设置为进程关联掩码和该组的活动逻辑处理器的处理器掩码。 如果调用进程包含多个组中的线程,则函数为两个关联掩码返回零。

如果函数失败,则返回值为零,并且 lpProcessAffinityMasklpSystemAffinityMask 指向的变量的值未定义。 要获得更多的错误信息,请调用 GetLastError。

注解

进程关联掩码是一个位向量,其中每个位表示允许运行进程的处理器。 系统关联掩码是一个位向量,其中每个位表示配置为系统中的处理器。

进程关联掩码是系统关联掩码的子集。 进程仅允许在系统中配置的处理器上运行。 因此,当系统关联掩码为该处理器指定 0 位时,进程关联掩码无法为处理器指定 1 位。

从 Windows 11 和 Windows Server 2022 开始,在处理器数超过 64 的系统上,默认情况下,进程和线程相关性跨所有处理器组跨系统中的所有处理器。 GetProcessAffinityMask 函数将 lpProcessAffinityMasklpSystemAffinityMask 设置为进程和系统处理器掩码(超过进程的主组)。 如果进程在进程的主组之外显式设置了一个或多个线程的关联,则函数为两个关联掩码返回零。 但是,如果 hHandle 指定当前进程的句柄,则函数始终使用调用线程的主组 (默认情况下与进程的主组) 相同,以便设置 lpProcessAffinityMasklpSystemAffinityMask

要求

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

另请参阅

多个处理器

进程和线程函数

进程

处理器组

SetProcessAffinityMask

SetThreadAffinityMask