NtSetInformationThread 関数 (ntifs.h)
NtSetInformationThread ルーチンは、スレッドの優先度を設定します。
構文
__kernel_entry NTSYSCALLAPI NTSTATUS NtSetInformationThread(
[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 (1) | メモリの優先度が非常に低い。 |
MEMORY_PRIORITY_LOW (2) | メモリ優先度が低い。 |
MEMORY_PRIORITY_MEDIUM (3) | メモリの優先度が中程度です。 |
MEMORY_PRIORITY_BELOW_NORMAL (4) | 通常のメモリ優先度を下回る。 |
MEMORY_PRIORITY_NORMAL (5) | 通常のメモリ優先度。 これは、システム上のすべてのスレッドとプロセスの既定の優先度です。 |
[in] ThreadInformationLength
ThreadInformation のサイズ (バイト単位)。
戻り値
NtSetInformationThread は、成功した場合はSTATUS_SUCCESS、失敗した場合は適切な NTSTATUS エラー コードを返します。 考えられるエラー コードには、STATUS_INFO_LENGTH_MISMATCHやSTATUS_INVALID_PARAMETERなどがあります。
注釈
NtSetInformationThread は、上位レベルのドライバーによって呼び出され、ハンドルがあるスレッドの優先度を設定できます。
呼び出し元は、このルーチンを呼び出すために、特定のスレッドのTHREAD_SET_INFORMATIONアクセス権を持っている必要があります。
通常、ドライバーによって作成されたスレッドを設定するデバイス ドライバーと中間ドライバーは、NtSetInformationThread を呼び出すのではなく、ドライバーによって作成されたスレッドから KeSetBasePriorityThread または KeSetPriorityThread を呼び出します。 ただし、ドライバーは NtSetInformationThread を呼び出して、そのスレッドを実行する前にドライバーが作成したスレッドの優先度を上げることができます。
カーネル モード ドライバーは、スレッドのページ優先度を指定する ThreadPagePriority を使用して NtSetInformationThread 関数を呼び出すことができます。
システム のパフォーマンスを向上させるために、ドライバーは ThreadPagePriority で 関数を使用して、バックグラウンド操作を実行するスレッドのページ優先度を下げるか、ファイルやデータにアクセスする予定のファイルとデータに間もなくアクセスする必要があります。 たとえば、マルウェア対策アプリケーションでは、ファイルのスキャンに関連するスレッドの優先順位が低くなる可能性があります。
注意
この関数の呼び出しがカーネル モードで発生する場合は、 NtSetInformationThread ではなく ZwSetInformationThread という名前を使用する必要があります。
カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチン の NtXxx バージョンと ZwXxx バージョン間の関係の詳細については、「 ネイティブ システム サービス ルーチンの Nt バージョンと Zw バージョンの使用」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 |
対象プラットフォーム | ユニバーサル |
Header | ntifs.h (Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs、PowerIrpDDis |