SetProcessAffinityMask 関数 (winbase.h)
指定したプロセスのスレッドのプロセッサ アフィニティ マスクを設定します。
構文
BOOL SetProcessAffinityMask(
[in] HANDLE hProcess,
[in] DWORD_PTR dwProcessAffinityMask
);
パラメーター
[in] hProcess
アフィニティ マスクを設定するプロセスのハンドル。 このハンドルには、 PROCESS_SET_INFORMATION アクセス権が必要です。 詳細については、「 セキュリティとアクセス権の処理」を参照してください。
[in] dwProcessAffinityMask
プロセスのスレッドのアフィニティ マスク。
64 を超えるプロセッサを持つシステムでは、アフィニティ マスクは、1 つの プロセッサ グループ内のプロセッサを指定する必要があります。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
プロセス アフィニティ マスクが、システムで構成されていないプロセッサを要求する場合、最後のエラー コードは ERROR_INVALID_PARAMETER。
プロセッサが 64 を超えるシステムでは、呼び出し元のプロセスに複数のプロセッサ グループ内のスレッドが含まれている場合、最後のエラー コードは ERROR_INVALID_PARAMETER。
解説
プロセス アフィニティ マスクは、各ビットがプロセスのスレッドの実行を許可される論理プロセッサを表すビット ベクターです。 プロセス アフィニティ マスクの値は、 GetProcessAffinityMask 関数によって取得されるシステム アフィニティ マスク値のサブセットである必要があります。 プロセスは、システムに構成されたプロセッサでのみ実行できます。 したがって、システム・アフィニティ・マスクがそのプロセッサーに 0 ビットを指定する場合、プロセス・アフィニティ・マスクはプロセッサーに 1 ビットを指定できません。
プロセス アフィニティは、子プロセスまたは新しくインスタンス化されたローカル プロセスによって継承されます。
独自のプロセス以外のプロセスによって呼び出される可能性がある DLL で SetProcessAffinityMask を呼び出さないでください。
プロセッサが 64 を超えるシステムでは、 SetProcessAffinityMask 関数を使用して、1 つの プロセッサ グループ内のスレッドを持つプロセスに対してのみプロセス アフィニティ マスクを設定できます。 SetThreadAffinityMask 関数を使用して、複数のグループ内の個々のスレッドのアフィニティ マスクを設定します。 これにより、プロセスのグループ割り当てが効果的に変更されます。
Windows 11 および Windows Server 2022 以降では、プロセッサ数が 64 を超えるシステムでは、プロセスとスレッドのアフィニティは、既定ですべてのプロセッサ グループにわたって、システム内のすべてのプロセッサにまたがっています。 呼び出し元のプロセスに複数のプロセッサ グループ内のスレッドが含まれている場合に常に失敗する代わりに、プロセスがプロセスのプライマリ グループの外部にある 1 つ以上のスレッドのアフィニティを明示的に設定した場合、SetProcessAffinityMask 関数は失敗します (最後のエラー コードERROR_INVALID_PARAMETER 0 を返します)。
要件
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | winbase.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |