Freigeben über


KsAddIrpToCancelableQueue-Funktion (ks.h)

Die KsAddIrpToCancelableQueue-Funktion fügt einer Warteschlange abbruchbarer IRPs einen IRP hinzu, sodass die IRP abgebrochen werden kann. Wenn die IRP zuvor auf einen abgebrochenen Zustand festgelegt wurde, schließt die KsAddIrpToCancelableQueue-Funktion den Abbruch dieses IRP ab.

Syntax

KSDDKAPI VOID KsAddIrpToCancelableQueue(
  [in, out]      PLIST_ENTRY           QueueHead,
  [in]           PKSPIN_LOCK           SpinLock,
  [in]           PIRP                  Irp,
  [in]           KSLIST_ENTRY_LOCATION ListLocation,
  [in, optional] PDRIVER_CANCEL        DriverCancel
);

Parameter

[in, out] QueueHead

Gibt den vom Treiber zugewiesenen Speicher für den Kopf der Warteschlange an, der das IRP hinzugefügt werden soll.

[in] SpinLock

Zeigt auf die Spin-Sperre des Treibers für den Warteschlangenzugriff auf die unter QueueHead angegebene Warteschlange. Eine Kopie dieses Zeigers wird im KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) des IRP zur Verwendung durch die Abbruchroutine aufbewahrt, falls erforderlich.

[in] Irp

Gibt den IRP an, der der in QueueHead angegebenen Warteschlange hinzugefügt werden soll.

[in] ListLocation

Gibt an, ob diese IRP am Anfang oder Am Ende der Warteschlange platziert werden soll. Dieser Wert muss KsListEntryTail oder KsListEntryHead sein.

[in, optional] DriverCancel

Optionaler Parameter, der eine vom Treiber bereitgestellte Abbruchroutine für die Verwendung angibt. Wenn dies NULL ist, wird die Standard-KsCancelRoutine verwendet.

Rückgabewert

Keine

Bemerkungen

Wenn die IRP beim Aufruf dieser Routine in einen Abbruchzustand versetzt wurde, ruft KsAddIrpToCancelableQueue sofort die unter DriverCancel angegebene Abbruchroutine auf, oder wenn bei DriverCancel keine Routine angegeben wurde, wird die Standardmäßige Streamingabbruchroutine aufgerufen.

Mit der Funktion KsAddIrpToCancelableQueue können IRPs abgebrochen werden, bevor sie in eine Abbruchliste gesetzt werden oder wenn sie von einer Liste in eine andere verschoben werden. Diese Funktion kann auf IRQ-Ebene DISPATCH_LEVEL oder niedriger aufgerufen werden, es sei denn, die vom Treiber zugewiesene Warteschlange und alle Einträge in der Warteschlange sind systemresident oder aus dem residenten Speicher zugeordnet.

Die Funktion verwendet nicht die Drehsperre abbrechen, um der Liste Elemente hinzuzufügen. Der Zugriff auf die Liste wird mithilfe der bereitgestellten Spin-Sperre synchronisiert und basiert auf atomaren Vorgängen auf Irp-CancelRoutine>.

Anforderungen

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