다음을 통해 공유


SetProcessAffinityMask 함수(winbase.h)

지정된 프로세스의 스레드에 대한 프로세서 선호도 마스크를 설정합니다.

구문

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

매개 변수

[in] hProcess

선호도 마스크를 설정할 프로세스에 대한 핸들입니다. 이 핸들에는 PROCESS_SET_INFORMATION 액세스 권한이 있어야 합니다. 자세한 내용은 프로세스 보안 및 액세스 권한을 참조하세요.

[in] dwProcessAffinityMask

프로세스의 스레드에 대한 선호도 마스크입니다.

프로세서가 64개 이상인 시스템에서 선호도 마스크는 단일 프로세서 그룹에 프로세서를 지정해야 합니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

프로세스 선호도 마스크가 시스템에 구성되지 않은 프로세서를 요청하는 경우 마지막 오류 코드가 ERROR_INVALID_PARAMETER.

64개 이상의 프로세서가 있는 시스템에서 호출 프로세스에 둘 이상의 프로세서 그룹에 스레드가 포함된 경우 마지막 오류 코드가 ERROR_INVALID_PARAMETER.

설명

프로세스 선호도 마스크는 각 비트가 프로세스의 스레드를 실행할 수 있는 논리 프로세서를 나타내는 비트 벡터입니다. 프로세스 선호도 마스크의 값은 GetProcessAffinityMask 함수에서 가져온 시스템 선호도 마스크 값의 하위 집합이어야 합니다. 프로세스는 시스템에 구성된 프로세서에서만 실행할 수 있습니다. 따라서 시스템 선호도 마스크가 해당 프로세서에 대해 0비트 를 지정하는 경우 프로세스 선호도 마스크는 프로세서에 대해 1비트 를 지정할 수 없습니다.

프로세스 선호도는 자식 프로세스 또는 새로 인스턴스화된 로컬 프로세스에서 상속됩니다.

사용자 고유가 아닌 다른 프로세스에서 호출할 수 있는 DLL에서 SetProcessAffinityMask 를 호출하지 마세요.

프로세서가 64개 이상인 시스템에서 SetProcessAffinityMask 함수를 사용하여 단일 프로세서 그룹의 스레드가 있는 프로세스에 대해서만 프로세스 선호도 마스크를 설정할 수 있습니다. SetThreadAffinityMask 함수를 사용하여 여러 그룹의 개별 스레드에 대한 선호도 마스크를 설정합니다. 이렇게 하면 프로세스의 그룹 할당이 효과적으로 변경됩니다.

Windows 11 및 Windows Server 2022부터 64개 이상의 프로세서가 있는 시스템에서 프로세스 및 스레드 친화성은 기본적으로 모든 프로세서 그룹에 걸쳐 시스템의 모든 프로세서에 걸쳐 있습니다. 호출 프로세스에 둘 이상의 프로세서 그룹에 스레드가 포함된 경우 항상 실패하는 대신 프로세스가 프로세스의 기본 그룹 외부에 있는 하나 이상의 스레드의 선호도를 명시적으로 설정한 경우 SetProcessAffinityMask 함수가 실패합니다(마지막 오류 코드가 ERROR_INVALID_PARAMETER 0을 반환함).

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 winbase.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

CreateProcess

GetProcessAffinityMask

다중 프로세서

프로세스 및 스레드 함수

프로세스

프로세서 그룹

SetThreadAffinityMask