次の方法で共有


StorPortSetSystemGroupAffinityThread 関数 (storport.h)

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

構文

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 のグループ番号とアフィニティ マスクの両方に 0 を書き込みます。

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

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

要件

要件
サポートされている最小のサーバー Windows Server 2022
Header storport.h
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

**KeSetSystemGroupAffinityThread **

STOR_GROUP_AFFINITY

StorPortCreateSystemThread

StorPortGetCurrentIrql

StorPortRevertToUserGroupAffinityThread