KeInsertQueue-Funktion (ntifs.h)

Die KeInsertQueue-Routine fügt einen Eintrag am Ende der angegebenen Warteschlange ein, wenn sie den Eintrag nicht sofort verwenden kann, um eine Threadwartezeit zu erfüllen.

Syntax

LONG KeInsertQueue(
  [in, out] PRKQUEUE    Queue,
  [in, out] PLIST_ENTRY Entry
);

Parameter

[in, out] Queue

Zeiger auf ein initialisiertes Warteschlangenobjekt, für das der Aufrufer residenten Speicher im nicht ausgelagerten Pool bereitstellt.

[in, out] Entry

Zeiger auf einen Eintrag, der in die Warteschlange eingereiht werden soll. Bei diesem Zeiger muss es sich um eine adressebasierte Systemraumadresse handeln.

Rückgabewert

KeInsertQueue gibt den vorherigen Signalzustand der angegebenen Warteschlange zurück. Wenn er vor dem Aufruf von KeInsertQueue auf 0 (d. h. nicht signalisiert) festgelegt wurde, gibt KeInsertQueue null zurück, was bedeutet, dass keine Einträge in die Warteschlange eingereiht wurden. Wenn es ungleich null (signalisiert) war, gibt KeInsertQueue die Anzahl der Einträge zurück, die vor dem Aufruf von KeInsertQueue in die Warteschlange eingereiht wurden.

Hinweise

Einträge, die von KeInsertQueue in die Warteschlange gestellt werden sollen, müssen aus einem nicht ausseitigen Pool zugeordnet werden. Beispielsweise kann der Arbeitsspeicher für vom Aufrufer definierte Einträge mit ExAllocatePoolWithTag zugeordnet werden. Wenn der Aufrufer Einträge einer festen Größe zuordnet, ist das Erstellen einer Lookaside-Liste mit ExInitializeNPagedLookasideList und das Zuweisen mit ExAllocateFromNPagedLookasideList effizienter als häufige Aufrufe von ExAllocatePoolWithTag, insbesondere für Einträge, deren Größe kein Vielfaches von PAGE_SIZE ist.

Wenn Threads auf das Warteschlangenobjekt warten, wenn KeInsertQueue aufgerufen wird, wird die Wartezeit eines einzelnen Threads durch diesen Aufruf erfüllt. Der Thread wird zur Ausführung mit dem angegebenen Entry-Zeiger verteilt.

Wenn beim Aufrufen von KeInsertQueue derzeit keine Threads auf das Warteschlangenobjekt warten, wird der angegebene Eintrag in die Warteschlange eingefügt, und der Signalstatus des Warteschlangenobjekts wird erhöht.

Weitere Informationen zur Verwendung von vom Treiber verwalteten internen Warteschlangen finden Sie unter Vom Treiber verwaltete Warteschlangen.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header ntifs.h (include Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport)

Weitere Informationen

ExAllocateFromNPagedLookasideList

ExAllocatePoolWithTag

ExInitializeNPagedLookasideList

KeInitializeQueue

KeInsertHeadQueue

KeRemoveQueue