KeRevertToUserGroupAffinityThread 関数 (wdm.h)
KeRevertToUserGroupAffinityThread ルーチンは、スレッドの作成時に呼び出し元のスレッドのグループ アフィニティを元の値に復元します。
構文
void KeRevertToUserGroupAffinityThread(
[in] PGROUP_AFFINITY PreviousAffinity
);
パラメーター
[in] PreviousAffinity
復元するグループ アフィニティへのポインター。 このパラメーターは、グループ番号とアフィニティ マスクを含む GROUP_AFFINITY 構造体を指します。 affinity mask は、ユーザー スレッドが実行できる論理プロセッサのセットを指定します。
戻り値
なし
解説
このルーチンは、呼び出し元スレッドのグループ番号とグループ相対アフィニティ マスクを変更します。 グループ番号とアフィニティ マスクは、スレッドを実行できるプロセッサのセットを識別します。 成功した場合、ルーチンは、このセット内のプロセッサで実行するスレッドをスケジュールします。
PreviousAffinity パラメーターは、スレッドの新しいグループ番号 (グループ メンバー) とアフィニティ マスク (マスク メンバー) を指定するGROUP_AFFINITY構造体を指します。 PreviousAffinity-Mask> が 0 以外の場合、KeRevertToUserGroupAffinityThread は呼び出し元スレッドのグループ番号とアフィニティ マスクを 構造体の値に設定します。 PreviousAffinity-Mask> が 0 の場合、ルーチンは、スレッドが初期化された時点で、グループ番号とアフィニティ マスクを元の値に復元します。
プロセスは、一度に複数のグループに対してアフィニティを持つことができます。 ただし、スレッドは常に 1 つのグループにのみ割り当てることができ、そのグループは常にスレッドのプロセスのアフィニティにあります。
スレッドは、 KeSetSystemGroupAffinityThread ルーチンを呼び出すことによって、割り当てられているグループを変更できます。 KeSetSystemGroupAffinityThread の 1 つ以上の呼び出しの後、スレッドは KeRevertToUserGroupAffinityThread を呼び出して、スレッドの作成時に持っていた元のグループ アフィニティを復元できます。
スレッドが作成された後、スレッドが最初に KeSetSystemGroupAffinityThread を呼び出さない限り、KeRevertToUserGroupAffinityThread の呼び出しは影響を与えなくなります (つまり、スレッドのグループ番号とアフィニティ マスクは変更されません)。 KeRevertToUserGroupAffinityThread の呼び出しの後、スレッドが最初に KeSetSystemGroupAffinityThread を呼び出さない限り、KeRevertToUserGroupAffinityThread の 2 回目の呼び出しは有効になりません。
ルーチンは、グループ番号とアフィニティ・マスクを、*PreviousAffinity で指定された値に変更します。これは、以下が該当する場合に限られます。
- グループ番号は有効です。
- アフィニティ マスクは有効です (つまり、グループ内の論理プロセッサに対応するマスク ビットのみが設定されます)。
- アフィニティ マスクで指定されているプロセッサの少なくとも 1 つがアクティブです。
関連ルーチン KeRevertToUserAffinityThreadEx は呼び出し元のスレッドのアフィニティ マスクを変更しますが、このルーチンは KeRevertToUserGroupAffinityThread とは異なり、グループ番号を入力パラメーターとして受け入れません。 Windows 7 以降のバージョンの Windows オペレーティング システムでは、 KeRevertToUserAffinityThreadEx は、アフィニティ マスクがグループ 0 のプロセッサを参照することを前提としています。これは、グループをサポートしていない以前のバージョンの Windows でのこのルーチンの動作と互換性があります。 この動作により、 KeRevertToUserAffinityThreadEx を呼び出し、グループ指向機能を使用しない既存のドライバーが、2 つ以上のグループを持つマルチプロセッサ システムで正しく実行されるようになります。 ただし、Windows 7 以降のバージョンの Windows オペレーティング システムでグループ指向機能を使用するドライバーでは、KeRevertToUserAffinityThreadEx ではなく KeRevertToUserGroupAffinityThread を呼び出す必要があります。
KERevertToUserGroupAffinityThread が IRQL <= APC_LEVEL で呼び出され、呼び出しが成功した場合、新しい (元に戻された) グループ アフィニティはすぐに有効になります。 呼び出しが戻ると、呼び出し元のスレッドは、新しいグループ アフィニティで指定されたプロセッサで既に実行されています。 KeRevertToUserGroupAffinityThread が IRQL = DISPATCH_LEVEL で呼び出され、呼び出しが成功した場合、呼び出し元が以下の IRQL を下げるまで保留中のプロセッサの変更は延期DISPATCH_LEVEL。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 7 以降のバージョンの Windows で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Ntddk.h、Wdm.h、Ntddk.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (「解説」セクションを参照)。 |