KeInsertQueue 関数 (ntifs.h)
KeInsertQueue ルーチンは、スレッド待機を満たすためにエントリをすぐに使用できない場合、指定されたキューの末尾にエントリを挿入します。
構文
LONG KeInsertQueue(
[in, out] PRKQUEUE Queue,
[in, out] PLIST_ENTRY Entry
);
パラメーター
[in, out] Queue
呼び出し元が非ページ プールに常駐ストレージを提供する初期化されたキュー オブジェクトへのポインター。
[in, out] Entry
キューに入れるエントリへのポインター。 このポインターは、常駐システム・スペース・アドレスでなければなりません。
戻り値
KeInsertQueue は 、指定されたキューの以前のシグナル状態を返 します。 KeInsertQueue が呼び出される前に 0 (つまりシグナル化されていない) に設定された場合、KeInsertQueue は 0 を返します。つまり、エントリがキューに入れられなかったことを意味します。 0 以外 (シグナル) の場合、 KeInsertQueue は 、KeInsertQueue が呼び出される前にキューに登録されたエントリの数を返します。
注釈
KeInsertQueue によってキューに登録されるエントリは、非ページ プールから割り当てる必要があります。 たとえば、呼び出し元定義エントリのメモリは 、ExAllocatePoolWithTag を使用して割り当てることができます。 呼び出し元が固定サイズのエントリを割り当てる場合、 ExInitializeNPagedLookasideList を使用してルックアサイド リストを作成し、 ExAllocateFromNPagedLookasideList を使用して割り当てる方が、 ExAllocatePoolWithTag を頻繁に呼び出すよりも効率的です。特に、サイズがPAGE_SIZEの倍数ではないエントリの場合です。
KeInsertQueue が呼び出されたときにキュー オブジェクトで待機しているスレッドがある場合、この呼び出しによって 1 つのスレッドの待機が満たされます。 スレッドは、指定された Entry ポインターを使用して実行するためにディスパッチされます。
KeInsertQueue が呼び出されたときにキュー オブジェクトで現在待機しているスレッドがない場合は、指定されたエントリがキューに挿入され、キュー オブジェクトのシグナル状態がインクリメントされます。
ドライバーで管理された内部キューの使用の詳細については、「 Driver-Managed Queues」を参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | ntifs.h (Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport) |
こちらもご覧ください
ExAllocateFromNPagedLookasideList