KsMoveIrpsOnCancelableQueue-Funktion (ks.h)
Die KsMoveIrpsOnCancelableQueue-Funktion verschiebt die angegebenen IRPs aus dem SourceList Parameter in den parameter DestinationList Parameter, abhängig vom wert, der von der minidriver-definierten KStrIrpListCallback-Funktion zurückgegeben wird.
Syntax
KSDDKAPI NTSTATUS KsMoveIrpsOnCancelableQueue(
[in, out] PLIST_ENTRY SourceList,
[in] PKSPIN_LOCK SourceLock,
[in, out] PLIST_ENTRY DestinationList,
[in, optional] PKSPIN_LOCK DestinationLock,
[in] KSLIST_ENTRY_LOCATION ListLocation,
[in] PFNKSIRPLISTCALLBACK ListCallback,
[in] PVOID Context
);
Parameter
[in, out] SourceList
Gibt den Kopf der Warteschlange an, aus der die IRPs entfernt werden sollen.
[in] SourceLock
Zeigen Sie auf die Drehungssperre des Treibers für den Zugriff auf die Quellwarteschlange.
[in, out] DestinationList
Gibt den Kopf der Warteschlange an, auf der die IRPs hinzugefügt werden sollen.
[in, optional] DestinationLock
Enthält optional einen Zeiger auf die Drehungssperre des Treibers für den Zugriff auf die Zielwarteschlange. Wenn dies nicht angegeben wird, wird der SourceLock Parameter verwendet, um beide Warteschlangen zu steuern. Wenn angegeben, wird diese Sperre immer nach dem SourceLock Parameter abgerufen. Wenn die Zielliste über eine separate Drehsperre verfügt, wird die systemweite Cancel Spin Lock zuerst abgerufen, um IRPs zu verschieben und die KSQUEUE_SPINLOCK_IRP_STORAGE() Drehsperre zu aktualisieren.
[in] ListLocation
Gibt an, ob die IRPs vom Kopf oder vom Tail der Quellwarteschlange aufgezählt werden sollen. Alle IRPs, die verschoben werden, werden am gegenteiligen Ende der Zielwarteschlange platziert, sodass die Sortierung beibehalten wird.
[in] ListCallback
Gibt die minidriverdefinierte KStrIrpListCallback--Funktion an, um anzugeben, ob ein bestimmter IRP von SourceList- in DestinationList-verschoben werden soll oder ob die Enumeration beendet werden soll.
[in] Context
Kontext, der an ListCallback-übergeben wird.
Rückgabewert
Gibt STATUS_SUCCESS zurück, wenn die Liste vollständig aufgezählt wurde; gibt andernfalls eine Warnung oder einen Fehler zurück, der von der minidriver-definierten KStrIrpListCallback Rückruffunktion zurückgegeben wird, die die Aufzählung unterbrochen hat.
Bemerkungen
Ein IRP wird verschoben, wenn die KStrIrpListCallback--Funktion angibt, dass sie verschoben werden soll, ob sie aktuell erworben wird. Wenn KStrIrpListCallback STATUS_SUCCESS zurückgibt, wird das IRP verschoben. Wenn sie STATUS_NO_MATCH zurückgibt, wird das IRP nicht verschoben. Alle anderen Rückgabewarnungen oder Fehlerwerte beenden die Aufzählung und werden von der Funktion zurückgegeben. Der wert STATUS_NO_MATCH sollte nicht als Fehler durch KStrIrpListCallback-zurückgegeben werden. KStrIrpListCallback- wird bei DISPATCH_LEVEL aufgerufen. KStrIrpListCallback- wird immer mindestens einmal am Ende mit einem NULL- IRP-Wert aufgerufen, um die Listenaufzählung abzuschließen.
KsMoveIrpsOnCancelableQueue weiter durch die Liste, bis die Rückruffunktion angibt, dass die Suche beendet werden soll oder das Ende der Liste erreicht ist. KsMoveIrpsOnCancelableQueue minimiert den Einsatz der systemweiten Cancel Spin Lock, indem die bereitgestellten Drehsperren verwendet werden, um den Zugriff nach Möglichkeit zu synchronisieren. KsMoveIrpsOnCancelableQueue lässt die Abbruchroutine beim Verschieben von IRPs nicht zu.
Die Funktion kann bei DISPATCH_LEVEL oder niedriger aufgerufen werden.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Header- | ks.h (enthalten Ks.h) |
Library | Ks.lib |