PsQueryProcessAvailableCpus 関数は、特定のプロセスで実行できる CPU のセットに対してクエリを実行します。
構文
NTSTATUS PsQueryProcessAvailableCpus(
[in] PEPROCESS Process,
[in, out] PKAFFINITY_EX Affinity,
[in, optional] PULONG64 ObservedSequenceNumber,
[out] PULONG64 SequenceNumber
);
パラメーター
[in] Process
プロセスへのポインター (PEPROCESS)。
[in, out] Affinity
プロセスで使用可能な CPU のセットを受け取る拡張アフィニティ オブジェクト (PKAFFINITY_EX) へのポインター。
[in, optional] ObservedSequenceNumber
必要に応じて、このルーチンの前の呼び出しによって呼び出し元によって観察された最新のシーケンス番号へのポインターを提供します。 このシーケンス番号が現在のシーケンス番号と一致する場合、ルーチンはSTATUS_NO_WORK_DONEを返し、アフィニティ バッファーに書き込むことはありません。
[out] SequenceNumber
指定されたプロセスで使用可能な CPU の現在のシーケンス番号を受け取るバッファーへのポインター。
戻り値
PsQueryProcessAvailableCpus は、 次のいずれかの NTSTATUS 値を返します。
リターン コード | 説明 |
---|---|
STATUS_SUCCESS | クエリが正常に完了しました。 |
STATUS_INVALID_PARAMETER | 必要なバッファーのいずれかが NULL です。 |
STATUS_NO_WORK_DONE | 指定されたシーケンス番号は現在のシーケンス番号と一致し、クエリは実行されませんでした。 |
STATUS_BUFFER_TOO_SMALL | 指定されたアフィニティ バッファーが小さすぎます。 |
注釈
このルーチンは、IRQL でPASSIVE_LEVELからDISPATCH_LEVELに呼び出すことができます。
アフィニティ バッファーは、アクティブなプロセッサ グループの数に対応できる十分な大きさにする必要があります。 KeQueryActiveGroupCount を使用して、必要なサイズを決定します。
シーケンス番号を使用すると、呼び出し元は、前回の呼び出し以降に CPU の可用性が変更されたかどうかを確認することで、繰り返しクエリを最適化できます。
要求事項
要件 | 価値 |
---|---|
ヘッダー | wdm.h |
IRQL | DISPATCH_LEVELにPASSIVE_LEVELする |