Share via


KsMoveIrpsOnCancelableQueue-Funktion (ks.h)

Die KsMoveIrpsOnCancelableQueue-Funktion verschiebt die angegebenen IRPs vom SourceList-Parameter in den Parameter DestinationList , 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

Zeiger auf die Spin-Sperre des Treibers für den Quellwarteschlangenzugriff.

[in, out] DestinationList

Gibt den Kopf der Warteschlange an, der die IRPs hinzugefügt werden sollen.

[in, optional] DestinationLock

Enthält optional einen Zeiger auf die Spin-Sperre des Treibers für den Zugriff auf die Zielwarteschlange. Wenn dies nicht angegeben wird, wird angenommen, dass der SourceLock-Parameter beide Warteschlangen steuert. Falls angegeben, wird diese Sperre immer nach dem SourceLock-Parameter abgerufen. Wenn die Zielliste über eine separate Spinsperre verfügt, wird zuerst die systemweite Cancel Spin Lock abgerufen, um IRPs zu verschieben und die KSQUEUE_SPINLOCK_IRP_STORAGE()-Spinsperre zu aktualisieren.

[in] ListLocation

Gibt an, ob die IRPs aus dem Kopf oder dem Ende der Quellwarteschlange aufgelistet werden sollen. Alle IRPs, die verschoben werden, werden am entgegengesetzten Ende der Zielwarteschlange platziert, sodass die Reihenfolge beibehalten wird.

[in] ListCallback

Gibt die minidriver-definierte KStrIrpListCallback-Funktion an, die aufgerufen werden soll, 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 wurde.

Rückgabewert

Gibt STATUS_SUCCESS zurück, wenn die Liste vollständig aufgezählt wurde. Gibt andernfalls alle Warnungen oder Fehler zurück, die von der minidriver-definierten KStrIrpListCallback-Rückruffunktion zurückgegeben werden, die die Enumeration unterbrochen hat.

Hinweise

Ein IRP wird verschoben, wenn die KStrIrpListCallback-Funktion angibt, dass sie verschoben werden soll, unabhängig davon, ob sie aktuell abgerufen wird. Wenn KStrIrpListCallback STATUS_SUCCESS zurückgibt, wird der IRP verschoben. Wenn STATUS_NO_MATCH zurückgegeben wird, wird der IRP nicht verschoben. Alle anderen Rückgabewarnungen oder Fehlerwerte beenden die Enumeration und werden von der Funktion zurückgegeben. Der STATUS_NO_MATCH Wert sollte von KStrIrpListCallback nicht als Fehler zurückgegeben werden. KStrIrpListCallback wird am DISPATCH_LEVEL aufgerufen. KStrIrpListCallback wird immer mindestens einmal am Ende mit einem NULL-IRP-Wert aufgerufen, um die Listenaufzählung abzuschließen.

KsMoveIrpsOnCancelableQueue durchläuft die Liste, bis die Rückruffunktion angibt, dass die Suche beendet werden soll oder das Ende der Liste erreicht ist. KsMoveIrpsOnCancelableQueue minimiert die Verwendung der systemweiten Cancel Spin Lock, indem die bereitgestellten Spinsperren verwendet werden, um den Zugriff nach Möglichkeit zu synchronisieren. KsMoveIrpsOnCancelableQueue lässt nicht zu, dass die Abbruchroutine beim Verschieben von IRPs geändert wird.

Die Funktion kann mit DISPATCH_LEVEL oder niedriger aufgerufen werden.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header ks.h (einschließlich Ks.h)
Bibliothek Ks.lib

Weitere Informationen

KStrIrpListCallback