次の方法で共有


PsQueryProcessAvailableCpus 関数 (wdm.h)

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する

こちらも参照ください

PsQueryProcessAvailableCpusCount

PsQuerySystemAvailableCpus

KeQueryActiveGroupCount