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