Freigeben über


KeInsertHeadQueue-Funktion (ntifs.h)

Die KeInsertHeadQueue Routine fügt einen Eintrag an der Kopfzeile der angegebenen Warteschlange ein, wenn der Eintrag nicht sofort zum Erfüllen einer Threadwartezeit verwendet werden kann.

Syntax

LONG KeInsertHeadQueue(
  [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. Diese Struktur ist wie folgt definiert:

typedef struct _KQUEUE {
    DISPATCHER_HEADER Header;
    LIST_ENTRY EntryListHead;
    ULONG CurrentCount;
    ULONG MaximumCount;
    LIST_ENTRY ThreadListHead;
} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
Mitglied Bedeutung
Header- Warteschlangenkopfzeile
EntryListHead- Zeiger auf den ersten Eintrag in der Warteschlange
CurrentCount- Anzahl der Einträge in der Warteschlange
MaximumCount- Maximale Anzahl von Einträgen, die die Warteschlange enthalten kann
ThreadListHead- Zeiger auf den ersten Eintrag in der Threadliste

[in, out] Entry

Zeigen Sie auf den einzufügenden Warteschlangeneintrag. Dieser Zeiger muss eine residente Systemraumadresse sein.

Rückgabewert

KeInsertHeadQueue den vorherigen Signalzustand der angegebenen Warteschlange zurück. Wenn sie vor dem Aufruf KeInsertHeadQueue- auf Null festgelegt wurde (nicht signalisiert), gibt KeInsertHeadQueue Null zurück, was bedeutet, dass keine Einträge in die Warteschlange gestellt wurden. Wenn es nicht zero (signalisiert) war, gibt KeInsertHeadQueue die Anzahl der Einträge zurück, die vor KeInsertHeadQueue in die Warteschlange gestellt wurden.

Bemerkungen

Einträge, die von KeInsertHeadQueue 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 KeInsertHeadQueue aufgerufen wird, wird die Wartezeit eines einzelnen Threads durch diesen 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 KeInsertHeadQueue 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

KeInsertQueue

KeRemoveQueue