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 を参照)、 ThreadPriority、 ThreadBasePriority、 ThreadPagePriority、または ThreadPowerThrottlingState。
[in] ThreadInformation
設定する情報を指定する変数へのポインター。
ThreadInformationClass が ThreadPriority の場合、この値は > LOW_PRIORITY、<= HIGH_PRIORITYである必要があります。
ThreadInformationClass が ThreadBasePriority の場合、この値は、システムの有効な基本優先度の範囲と、指定されたスレッドの元の優先度クラスに含まれている必要があります。 つまり、スレッドの優先度クラスが変数の場合、そのスレッドの基本優先度をリアルタイムの優先度値にリセットすることはできません。また、その逆も可能です。
ThreadInformationClass が ThreadPagePriority の場合、この値はPAGE_PRIORITY_INFORMATION構造体へのポインターです。ntddk.h を参照してください。 PagePriority メンバー値は、次のいずれかの値である必要があります。
ThreadInformationClass が ThreadPowerThrottlingState の場合、この値は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) |