GetProcessAffinityMask 関数 (winbase.h)
指定したプロセスのプロセス アフィニティ マスクとシステムのシステム アフィニティ マスクを取得します。
構文
BOOL GetProcessAffinityMask(
[in] HANDLE hProcess,
[out] PDWORD_PTR lpProcessAffinityMask,
[out] PDWORD_PTR lpSystemAffinityMask
);
パラメーター
[in] hProcess
アフィニティ マスクが必要なプロセスへのハンドル。
このハンドルには、 PROCESS_QUERY_INFORMATION または PROCESS_QUERY_LIMITED_INFORMATION アクセス権が必要です。 詳細については、「 プロセス のセキュリティとアクセス権」を参照してください。
Windows Server 2003 および Windows XP: ハンドルには 、PROCESS_QUERY_INFORMATION アクセス権が必要です。
[out] lpProcessAffinityMask
指定したプロセスのアフィニティ マスクを受け取る変数へのポインター。
[out] lpSystemAffinityMask
システムのアフィニティ マスクを受け取る変数へのポインター。
戻り値
関数が成功した場合、戻り値は 0 以外であり、 lpProcessAffinityMask および lpSystemAffinityMask によって指される変数が適切なアフィニティ マスクに設定されます。
64 を超えるプロセッサを持つシステムでは、呼び出し元プロセスのスレッドが 1 つの プロセッサ グループ内にある場合、この関数は lpProcessAffinityMask および lpSystemAffinityMask によって指される変数を、そのグループのアクティブな論理プロセッサのプロセス アフィニティ マスクとプロセッサ マスクに設定します。 呼び出し元のプロセスに複数のグループのスレッドが含まれている場合、関数は両方のアフィニティ マスクに対して 0 を返します。
関数が失敗した場合、戻り値は 0 で、 lpProcessAffinityMask および lpSystemAffinityMask が指す変数の値は未定義です。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
プロセス アフィニティ マスクは、各ビットが、プロセスの実行が許可されているプロセッサを表すビット ベクターです。 システム アフィニティ マスクは、各ビットがシステムに構成されているプロセッサを表すビット ベクターです。
プロセス アフィニティ マスクは、システム アフィニティ マスクのサブセットです。 プロセスは、システムに構成されたプロセッサでのみ実行できます。 したがって、システム アフィニティ マスクでプロセッサに 0 ビットが指定されている場合、プロセス アフィニティ マスクではプロセッサに 1 ビットを指定できません。
Windows 11 および Windows Server 2022 以降では、プロセッサ数が 64 を超えるシステムでは、プロセスとスレッドのアフィニティは、既定ですべてのプロセッサ グループにわたって、システム内のすべてのプロセッサにまたがっています。 GetProcessAffinityMask 関数は、lpProcessAffinityMask と lpSystemAffinityMask をプロセスに設定し、プロセスのプライマリ グループに対するシステム プロセッサ マスクを設定します。 プロセスがプロセスのプライマリ グループの外部にある 1 つ以上のスレッドのアフィニティを明示的に設定していた場合、関数は両方のアフィニティ マスクに対して 0 を返します。 ただし、 hHandle で現在のプロセスへのハンドルが指定されている場合、この関数は常に呼び出し元スレッドのプライマリ グループ (既定ではプロセスのプライマリ グループと同じ) を使用して lpProcessAffinityMask と lpSystemAffinityMask を設定します。
要件
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | winbase.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |