英語で読む

次の方法で共有


StorPortSetSystemGroupAffinityThread 関数 (storport.h)

StorPortSetSystemGroupAffinityThread 、呼び出し元スレッドのグループ番号とアフィニティ マスクを変更します。

構文

C++
ULONG StorPortSetSystemGroupAffinityThread(
  [in]           PVOID                HwDeviceExtension,
  [in/optional]  PVOID                ThreadContext,
  [in]           PSTOR_GROUP_AFFINITY Affinity,
  [out/optional] PSTOR_GROUP_AFFINITY PreviousAffinity
);

パラメーター

[in] HwDeviceExtension

ミニポートのハードウェア デバイス拡張機能へのポインター。

[in/optional] ThreadContext

StorPortCreateSystemThreadの前の呼び出しで受信したスレッド コンテキストへのポインター。

[in] Affinity

呼び出し元によって割り当てられた STOR_GROUP_AFFINITY 構造体へのポインター。呼び出し元スレッドの新しいグループ番号とグループ相対アフィニティ マスクを指定します。

[out/optional] PreviousAffinity

このルーチンが呼び出しの前に呼び出し元スレッドのグループ番号とアフィニティ マスクを書き込む STOR_GROUP_AFFINITY 構造体へのポインター。 このパラメーターは省略可能であり、NULL にすることができます。

戻り値

StorPortSetSystemGroupAffinityThread は、次のいずれかの値を返します。

リターン コード 形容
STOR_STATUS_SUCCESS 指定されたグループ アフィニティが正常に設定されました。
STOR_STATUS_INVALID_PARAMETER 指定されたパラメーターの 1 つ以上が無効です。
STOR_STATUS_UNSUCCESSFUL その他の内部システム上の理由で返されます。

備考

ミニポートは、StorPortSetSystemGroupAffinityThread 呼び出して、呼び出し元スレッドのグループ番号とグループ レベルのアフィニティ マスクを変更できます。

Affinity が指す STOR_GROUP_AFFINITY 構造体内のグループ番号とアフィニティ マスク、スレッドを実行できるプロセッサのセットを識別します。 成功した場合、StorPortSetSystemGroupAffinityThread は、このセット内のプロセッサで実行するスレッドをスケジュールします。

PreviousAffinity パラメーターが NULL 以外の場合、StorPortSetSystemGroupAffinityThread は、呼び出しの開始時に有効であった以前のグループ アフィニティに関する情報を、PreviousAffinity が指STOR_GROUP_AFFINITY 構造体に保存します。 前のスレッド アフィニティを復元するために、呼び出し元は、storPortRevertToUserGroupAffinityThread ルーチンへの入力パラメーターとして、この構造体へのポインターを指定できます。

ミニポートは、スレッドのグループ アフィニティを一時的に変更するには、この関数を呼び出す場合は、スレッドが終了する前に元の値にスレッド アフィニティを元の値に戻す StorPortRevertToUserGroupAffinityThread呼び出す必要があります。

スレッドは、いつでも 1 つのグループ アフィニティにのみ割り当てることができます。 そのグループは、常にスレッドのプロセスのアフィニティにあります。 スレッドは、このルーチンを呼び出すことによって、割り当てられているグループを変更できます。

StorPortSetSystemGroupAffinityThread 、グループ番号とアフィニティ マスクを、次に該当する場合にのみ、Affinity で指定された値に変更します。

  • グループ番号は有効です。
  • アフィニティ マスクは有効です (つまり、グループ内の論理プロセッサに対応するマスク ビットのみが設定されます)。
  • アフィニティ マスクで指定されているプロセッサの少なくとも 1 つがアクティブです。

これらの条件のいずれかが満たされていない場合、スレッドのグループ番号とアフィニティ マスクは変更されません。 PreviousAffinity が NULL 以外の場合、ルーチンは、PreviousAffinity でグループ番号とアフィニティ マスク両方にゼロを書き込みます。

Affinity の新しいアフィニティ マスクが有効 前に、StorPortSetSystemGroupAffinityThread は、現在アクティブでないプロセッサに対応するアフィニティ マスク ビットを削除 (ゼロに設定) します。 StorPortSetSystemGroupAffinityThread 呼び出しの後続の では、PreviousAffinity にルーチンが書き込む値に、この方法で変更されたアフィニティ マスクが含まれている可能性があります。

IRQL <= APC_LEVEL で StorPortSetSystemGroupAffinityThread が呼び出され、呼び出しが成功した場合、新しいグループ アフィニティはすぐに有効になります。 呼び出しが戻ると、呼び出し元のスレッドは、新しいグループ アフィニティで指定されたプロセッサで既に実行されています。 StorPortSetSystemGroupAffinityThread が IRQL = DISPATCH_LEVEL で呼び出され、呼び出しが成功した場合、保留中のプロセッサ変更は、呼び出し元が DISPATCH_LEVEL 以下の IRQL を下げるまで延期されます。

必要条件

要件 価値
サポートされる最小サーバー Windows Server 2022
ヘッダー storport.h
IRQL <= DISPATCH_LEVEL

関連項目

**KeSetSystemGroupAffinityThread **

STOR_GROUP_AFFINITY

StorPortCreateSystemThread

StorPortGetCurrentIrql

StorPortRevertToUserGroupAffinityThread