Partager via


KsAddIrpToCancelableQueue, fonction (ks.h)

La fonction KsAddIrpToCancelableQueue ajoute un IRP à une file d’attente d’IRPs 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 cet 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é par le pilote pour la tête de la file d’attente sur laquelle ajouter l’IRP.

[in] SpinLock

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

[in] Irp

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

[in] ListLocation

Indique si cet 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. S’il s’agit NULL, le KsCancelRoutine standard est utilisé.

Valeur de retour

Aucun

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 à DriverCancel, ou si aucune routine n’a été spécifiée à DriverCancel la routine d’annulation de streaming par défaut est appelée.

La fonction KsAddIrpToCancelableQueue permet aux IRPs d’être annulés même avant d’être placés sur une liste d’annulations, ou lorsqu’ils sont déplacés d’une liste à une autre. Cette fonction peut être appelée au niveau IRQ DISPATCH_LEVEL ou inférieure, 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 de rotation d’annulation 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.

Exigences

Exigence Valeur
plateforme cible Universel
d’en-tête ks.h (include Ks.h)
bibliothèque Ks.lib