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