Partager via


KsAddIrpToCancelableQueue, fonction (ks.h)

La fonction KsAddIrpToCancelableQueue ajoute un IRP à une file d’attente d’IRP annulables, ce qui permet l’annulation de l’IRP. Si l’IRP avait été précédemment défini sur un état annulé, la fonction KsAddIrpToCancelableQueue termine l’annulation de cette IRP.

Syntaxe

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
);

Paramètres

[in, out] QueueHead

Spécifie le stockage alloué au pilote pour le chef de la file d’attente sur lequel ajouter l’IRP.

[in] SpinLock

Pointe vers le verrou de rotation du pilote pour l’accès à la file d’attente spécifiée dans QueueHead. Une copie de ce pointeur est conservée dans le KSQUEUE_SPINLOCK_IRP_STORAGE (Irp) de l’IRP pour une utilisation par la routine d’annulation, si nécessaire.

[in] Irp

Spécifie l’IRP à ajouter à la file d’attente spécifiée dans QueueHead.

[in] ListLocation

Indique si ce IRP doit être placé au début ou à la fin de la file d’attente. Cette valeur doit être KsListEntryTail ou KsListEntryHead.

[in, optional] DriverCancel

Paramètre facultatif qui spécifie une routine d’annulation fournie par le pilote à utiliser. Si cette valeur est NULL, le KsCancelRoutine standard est utilisé.

Valeur de retour

None

Remarques

Si l’IRP a été placé dans un état d’annulation lorsque cette routine est appelée, KsAddIrpToCancelableQueue appelle immédiatement la routine d’annulation spécifiée dans DriverCancel, ou si aucune routine n’a été spécifiée dans DriverCancel , la routine d’annulation de streaming par défaut est appelée.

La fonction KsAddIrpToCancelableQueue permet d’annuler les IRPs avant même d’être placés dans une liste d’annulation ou lors du déplacement d’une liste à une autre. Cette fonction peut être appelée au niveau IRQ DISPATCH_LEVEL ou inférieur, sauf si la file d’attente allouée par le pilote et toutes les entrées de la file d’attente sont résidentes du système ou allouées à partir du stockage résident.

La fonction n’utilise pas le verrou d’annulation de rotation pour ajouter des éléments à la liste. L’accès à la liste est synchronisé à l’aide du verrou de rotation fourni et s’appuie sur des opérations atomiques sur Irp-CancelRoutine>.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête ks.h (inclure Ks.h)
Bibliothèque Ks.lib