ZwSetInformationThread 関数 (ntddk.h)

ZwSetInformationThread ルーチンは、スレッドの優先順位を設定します。

構文

NTSYSAPI NTSTATUS ZwSetInformationThread(
  [in] HANDLE          ThreadHandle,
  [in] THREADINFOCLASS ThreadInformationClass,
  [in] PVOID           ThreadInformation,
  [in] ULONG           ThreadInformationLength
);

パラメーター

[in] ThreadHandle

スレッド オブジェクトへのハンドル。 新しいスレッドを作成してハンドルを取得するには、 PsCreateSystemThread を呼び出します。 現在のスレッドを指定するには、 ZwCurrentThread マクロを使用します。

[in] ThreadInformationClass

THREADINFOCLASS 列挙のシステム定義値の 1 つ (ntddk.h を参照)、 ThreadPriorityThreadBasePriorityThreadPagePriority、または ThreadPowerThrottlingState

[in] ThreadInformation

設定する情報を指定する変数へのポインター。

ThreadInformationClassThreadPriority の場合、この値は > LOW_PRIORITY、<= HIGH_PRIORITYである必要があります。

ThreadInformationClassThreadBasePriority の場合、この値は、システムの有効な基本優先度の範囲と、指定されたスレッドの元の優先度クラスに含まれている必要があります。 つまり、スレッドの優先度クラスが変数の場合、そのスレッドの基本優先度をリアルタイムの優先度値にリセットすることはできません。また、その逆も可能です。

ThreadInformationClassThreadPagePriority の場合、この値はPAGE_PRIORITY_INFORMATION構造体へのポインターです。ntddk.h を参照してください。 PagePriority メンバー値は、次のいずれかの値である必要があります。

ThreadInformationClassThreadPowerThrottlingState の場合、この値はPOWER_THROTTLING_THREAD_STATE構造体へのポインターです。ntddk.h を参照してください。 PagePriority メンバー値は、次のいずれかの値である必要があります。

意味
MEMORY_PRIORITY_VERY_LOW メモリの優先度が非常に低い。
MEMORY_PRIORITY_LOW メモリ優先度が低い。
MEMORY_PRIORITY_MEDIUM メモリの優先度が中程度です。
MEMORY_PRIORITY_BELOW_NORMAL 通常のメモリ優先度を下回る。
MEMORY_PRIORITY_NORMAL 通常のメモリ優先度。 これは、システム上のすべてのスレッドとプロセスの既定の優先度です。

[in] ThreadInformationLength

ThreadInformation のサイズ (バイト単位)。

戻り値

ZwSetInformationThread は、成功した場合はSTATUS_SUCCESSを返し、失敗した場合は適切な NTSTATUS エラー コードを返します。 考えられるエラー コードには、STATUS_INFO_LENGTH_MISMATCHやSTATUS_INVALID_PARAMETERなどがあります。

注釈

ZwSetInformationThread は、上位レベルのドライバーによって呼び出され、ハンドルがあるスレッドの優先度を設定できます。

呼び出し元は、このルーチンを呼び出すために、特定のスレッドのTHREAD_SET_INFORMATIONアクセス権を持っている必要があります。

通常、ドライバーによって作成されたスレッドを設定するデバイス ドライバーと中間ドライバーは、ZwSetInformationThread を呼び出すのではなく、ドライバーによって作成されたスレッドから KeSetBasePriorityThread または KeSetPriorityThread を呼び出します。 ただし、ドライバーは ZwSetInformationThread を呼び出して、そのスレッドを実行する前にドライバーが作成したスレッドの優先度を上げることができます。

カーネル モード ドライバーは、ThreadPagePriority を使用して ZwSetInformationThread 関数を呼び出して、スレッドのページ優先度を指定できます。

システム のパフォーマンスを向上させるために、ドライバーは ThreadPagePriority で 関数を使用して、バックグラウンド操作を実行するスレッドのページ優先度を下げるか、ファイルやデータにアクセスする予定のファイルとデータに間もなくアクセスする必要があります。 たとえば、マルウェア対策アプリケーションでは、ファイルのスキャンに関連するスレッドの優先順位が低くなる可能性があります。

スレッドのページ優先度を決定するには、 ZwQueryInformationThread を呼び出します。

この関数の呼び出しがユーザー モードで行われる場合は、ZwSetInformationThread ではなく NtSetInformationThread という名前を使用する必要があります。

カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチンの NtXxx バージョンと ZwXxx バージョンの間の関係の詳細については、「ネイティブ システム サービス ルーチンの Nt バージョンと Zw バージョンの使用」を参照してください。

要件

要件
対象プラットフォーム ユニバーサル
Header ntddk.h (Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

こちらもご覧ください

KeSetBasePriorityThread

KeSetPriorityThread

PsCreateSystemThread

Nt および Zw バージョンのネイティブ システム サービス ルーチンの使用