Freigeben über


KeInsertQueue-Funktion (ntifs.h)

Die KeInsertQueue Routine fügt einen Eintrag am Ende der angegebenen Warteschlange ein, wenn der Eintrag nicht sofort verwendet werden 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 gestellt werden soll. Dieser Zeiger muss eine residente Systemraumadresse sein.

Rückgabewert

KeInsertQueue gibt den vorherigen Signalzustand des angegebenen Queuezurück. Wenn sie auf Null festgelegt wurde (d. h. nicht signalisiert), bevor KeInsertQueue aufgerufen wurde, gibt KeInsertQueue Null zurück, was bedeutet, dass keine Einträge in die Warteschlange gestellt wurden. Wenn es nicht zero (signalisiert) war, gibt KeInsertQueue die Anzahl der Einträge zurück, die vor KeInsertQueue in die Warteschlange gestellt wurden.

Bemerkungen

Einträge, die von KeInsertQueue in die Warteschlange gestellt werden sollen, müssen aus nicht seitengebundenen Pools zugewiesen werden. Der Speicher für aufruferdefinierte Einträge kann z. B. mit ExAllocatePoolWithTag-zugeordnet werden. Wenn der Aufrufer Einträge einer festen Größe zuordnet, ist das Erstellen einer Lookaside-Liste mit ExInitializeNPagedLookasideList und Zuweisung von ihr mit ExAllocateFromNPagedLookasideList effizienter als häufige Aufrufe an ExAllocatePoolWithTag, insbesondere für Einträge, deren Größe nicht mehrere PAGE_SIZE ist.

Wenn Threads auf das Warteschlangenobjekt warten, wenn KeInsertQueue aufgerufen wird, wird die Wartezeit eines einzelnen Threads von diesem Aufruf erfüllt. Der Thread wird für die Ausführung mit dem angegebenen Entry Zeiger verteilt.

Wenn derzeit keine Threads auf das Warteschlangenobjekt warten, wenn KeInsertQueue aufgerufen wird, wird der angegebene Eintrag in die Warteschlange eingefügt, und der Signalzustand des Warteschlangenobjekts wird erhöht.

Weitere Informationen zur Verwendung von vom Treiber verwalteten internen Warteschlangen finden Sie unter Driver-Managed Warteschlangen.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- ntifs.h (einschließlich Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= DISPATCH_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport)

Siehe auch

ExAllocateFromNPagedLookasideList

ExAllocatePoolWithTag-

ExInitializeNPagedLookasideList

KeInitializeQueue

KeInsertHeadQueue

KeRemoveQueue