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)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

CreateProcess

GetProcessAffinityMask

多個處理器

處理序和執行緒函式

程序

處理器群組

SetThreadAffinityMask