KeRevertToUserGroupAffinityThread 関数 (wdm.h)
KeRevertToUserGroupAffinityThread ルーチンは、スレッドが作成された時点で、呼び出し元のスレッドのグループ アフィニティを元の値に復元します。
構文
void KeRevertToUserGroupAffinityThread(
[in] PGROUP_AFFINITY PreviousAffinity
);
パラメーター
[in] PreviousAffinity
復元するグループ アフィニティへのポインター。 このパラメーターは、グループ番号とアフィニティ マスクを含む GROUP_AFFINITY 構造体を指します。 アフィニティ マスクは、ユーザー スレッドが実行できる論理プロセッサのセットを指定します。
戻り値
何一つ
備考
このルーチンは、呼び出し元スレッドのグループ番号とグループ相対アフィニティ マスクを変更します。 グループ番号とアフィニティ マスクは、スレッドを実行できるプロセッサのセットを識別します。 成功した場合、ルーチンは、このセット内のプロセッサで実行するスレッドをスケジュールします。
PreviousAffinity パラメーターは、スレッドの新しいグループ番号 (グループ メンバー) とアフィニティ マスク (Mask メンバー) を指定する GROUP_AFFINITY 構造体を指します。 PreviousAffinity ->Mask が 0 以外場合、KeRevertToUserGroupAffinityThread 呼び出し元スレッドのグループ番号とアフィニティ マスクを構造体内の値に設定します。 PreviousAffinity ->Maskがゼロの場合、ルーチンは、スレッドの初期化時にグループ番号とアフィニティ マスクを元の値に復元します。
プロセスは、一度に複数のグループに対してアフィニティを持つことができます。 ただし、スレッドはいつでも 1 つのグループにのみ割り当てることができ、そのグループは常にスレッドのプロセスのアフィニティ内にあります。
スレッドは、KeSetSystemGroupAffinityThread ルーチンを呼び出すことによって、割り当てられているグループを変更できます。 KeSetSystemGroupAffinityThread をする 1 つ以上の呼び出しの後、スレッドは、KeRevertToUserGroupAffinityThread 呼び出すことによって、スレッドが作成されたときに持っていた元のグループ アフィニティを復元できます。
スレッドが作成された後、KeRevertToUserGroupAffinityThread の呼び出しは、最初に KeSetSystemGroupAffinityThread 呼び出さない限り、影響はありません (つまり、スレッドのグループ番号とアフィニティ マスクは変更されません)。 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 で呼び出され、呼び出しが成功した場合、保留中のプロセッサ変更は、呼び出し元が DISPATCH_LEVEL 以下の IRQL を下げるまで延期されます。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 7 以降のバージョンの Windows で使用できます。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | wdm.h (Ntddk.h、Wdm.h、Ntddk.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (「解説」セクションを参照)。 |
関連項目
KeRevertToUserAffinityThreadEx の
KeSetSystemGroupAffinityThread の