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 個處理器的系統上,如果呼叫進程的執行緒位於單一處理器群組中,函式會將lpProcessAffinityMask 和 lpSystemAffinityMask所指向的變數設定為進程親和性遮罩,以及該群組作用中邏輯處理器的處理器遮罩。 如果呼叫進程包含多個群組中的執行緒,則函式會針對這兩個親和性遮罩傳回零。

如果函式失敗,傳回值為零,且 lpProcessAffinityMasklpSystemAffinityMask 所指向的變數值是未定義。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

進程親和性遮罩是位向量,其中每個位都代表進程允許執行所在的處理器。 系統親和性遮罩是位向量,其中每個位都代表設定為系統的處理器。

進程親和性遮罩是系統親和性遮罩的子集。 進程只允許在設定為系統的處理器上執行。 因此,當系統親和性遮罩指定該處理器的 0 位時,進程親和性遮罩無法為處理器指定 1 位。

從 Windows 11 和 Windows Server 2022 開始,在超過 64 個處理器的系統上,依預設,進程和執行緒親和性會跨越系統中的所有處理器GetProcessAffinityMask函式會將lpProcessAffinityMask 和 lpSystemAffinityMask設定為進程和系統處理器遮罩,透過進程的主要群組。 如果進程已明確設定進程主要群組外部一或多個執行緒的親和性,則函式會針對這兩個同質遮罩傳回零。 不過,如果hHandle指定目前進程的控制碼,函式一律會使用呼叫執行緒的主要群組 (,預設與進程的主要群組相同) ,才能設定lpProcessAffinityMask 和 lpSystemAffinityMask

規格需求

   
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 winbase.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

多個處理器

處理序和執行緒函式

程序

處理器群組

SetProcessAffinityMask

SetThreadAffinityMask