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 でグループ番号とアフィニティ マスク両方にゼロを書き込みます。
Affinity の新しいアフィニティ マスクが有効 前に、StorPortSetSystemGroupAffinityThread は、現在アクティブでないプロセッサに対応するアフィニティ マスク ビットを削除 (ゼロに設定) します。 StorPortSetSystemGroupAffinityThread 呼び出しの後続の では、PreviousAffinity にルーチンが書き込む値に、この方法で変更されたアフィニティ マスクが含まれている可能性があります。
IRQL <= APC_LEVEL で StorPortSetSystemGroupAffinityThread が呼び出され、呼び出しが成功した場合、新しいグループ アフィニティはすぐに有効になります。 呼び出しが戻ると、呼び出し元のスレッドは、新しいグループ アフィニティで指定されたプロセッサで既に実行されています。 StorPortSetSystemGroupAffinityThread が IRQL = DISPATCH_LEVEL で呼び出され、呼び出しが成功した場合、保留中のプロセッサ変更は、呼び出し元が DISPATCH_LEVEL 以下の IRQL を下げるまで延期されます。
要件 | 価値 |
---|---|
サポートされる最小サーバー | Windows Server 2022 |
ヘッダー | storport.h |
IRQL | <= DISPATCH_LEVEL |
**KeSetSystemGroupAffinityThread **
StorPortCreateSystemThreadの
StorPortGetCurrentIrqlの
StorPortRevertToUserGroupAffinityThreadの