次の方法で共有


KeSetSystemAffinityThreadEx 関数 (wdm.h)

KeSetSystemAffinityThreadEx ルーチンは、現在のスレッドのシステム アフィニティを設定します。

構文

KAFFINITY KeSetSystemAffinityThreadEx(
  [in] KAFFINITY Affinity
);

パラメーター

[in] Affinity

KAFFINITY現在のスレッドの新しいシステム アフィニティを指定する型指定された変数です。

戻り値

KeSetSystemAffinityThreadEx は、現在のスレッドの以前のシステム アフィニティを返すか、以前のシステム アフィニティがなかったことを示す 0 を返します。

備考

KeSetSystemAffinityThreadEx 、現在のスレッドのアフィニティ マスクが変更されます。 アフィニティ マスクは、スレッドを実行できるプロセッサのセットを識別します。 成功した場合、ルーチンは、このセット内のプロセッサで実行するスレッドをスケジュールします。

KeSetSystemAffinityThreadEx の呼び出し元は戻り値を保存し、後でこの値を KeRevertToUserAffinityThreadEx ルーチンに渡して、前のアフィニティ マスクを復元する必要があります。

マルチプロセッサ システムでは、ユーザー モード スレッドのコンテキストで実行されるカーネル モード ドライバー ルーチンは、スレッドのアフィニティ マスクを一時的に変更するために、KeSetSystemAffinityThreadEx を呼び出す必要がある場合があります。 ルーチンが終了する前に、KeRevertToUserAffinityThreadEx を呼び出して、スレッドのアフィニティ マスクを元の値に復元する必要があります。

ユーザー アフィニティ という用語は、ユーザー モード スレッドの元のアフィニティを指します。 カーネル モード ドライバーによって設定されるアフィニティは、システム アフィニティと呼ばれます。 KeSetSystemAffinityThreadEx の呼び出しによってスレッドのユーザー アフィニティがシステム アフィニティに置き換えられると、呼び出しは 0 を返します。 その後、ドライバーは KeRevertToUserAffinityThreadEx 呼び出し、この戻り値 (ゼロ) を Affinity 値として渡すことによって、ユーザー アフィニティを復元します。

さらに、特定のアフィニティ マスクを必要とするカーネル モード ドライバー ルーチンは、別のアフィニティ マスクを必要とする別のカーネル モード ルーチンを呼び出す可能性があります。 各ルーチン KeSetSystemAffinityThreadEx を呼び出して新しいアフィニティ マスクを設定し、KeRevertToUserAffinityThreadEx を呼び出して、前のアフィニティ マスクを復元してから戻すことができます。

KeSetSystemAffinityThreadEx ルーチンは、次の両方が当てはまる場合にのみ、現在のスレッドのアフィニティ マスクを Affinity 値に変更します。

  • Affinity 値は有効です (つまり、論理プロセッサに対応するマスク ビットのみが設定されます)。
  • Affinity 値で指定されているプロセッサの少なくとも 1 つがアクティブです。
これらの条件のいずれかが満たされていない場合、KeSetSystemAffinityThreadEx 呼び出しても効果はありません。

Windows 7 以降のバージョンの Windows では、プロセッサ グループがサポートされています。 プロセッサ グループに関する情報を処理するように設計されたドライバーでは、KeSetSystemAffinityThreadEx ではなく、プロセッサ グループを指定する KeSetSystemGroupAffinityThread ルーチン使用する必要があります。 ただし、Windows 7 以降のバージョンの Windows KeSetSystemAffinityThreadEx の実装では、プロセッサ グループをサポートしていない以前のバージョンの Windows 用に記述されたドライバーの互換性が提供されます。 この実装では、KeSetSystemAffinityThreadEx は、スレッドをグループ 0 に割り当て、アフィニティ マスクを使用して、スレッドを実行できるこのグループ内の論理プロセッサのセットを指定します。 このルーチンは、前のグループ相対アフィニティ マスクを返しますが、前のグループは返しません。

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

必要条件

要件 価値
サポートされる最小クライアント Windows Vista 以降のバージョンの Windows で使用できます。
ターゲット プラットフォーム 万国
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (「解説」セクションを参照)。

関連項目

KAFFINITY

KeRevertToUserAffinityThreadEx

KeSetSystemAffinityThread

KeSetSystemGroupAffinityThread