Partager via


KsMoveIrpsOnCancelableQueue, fonction (ks.h)

La fonction KsMoveIrpsOnCancelableQueue déplace les irps spécifiés du paramètre SourceList vers le paramètre DestinationList en fonction de la valeur renvoyée par la fonction KStrIrpListCallback définie par minidriver.

Syntaxe

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

Paramètres

[in, out] SourceList

Spécifie la tête de la file d’attente à partir de laquelle supprimer les IRP.

[in] SourceLock

Pointeur vers le verrou de rotation du pilote pour l’accès à la file d’attente source.

[in, out] DestinationList

Spécifie la tête de la file d’attente sur laquelle ajouter les IRPs.

[in, optional] DestinationLock

Contient éventuellement un pointeur vers le verrou de rotation du pilote pour l’accès à la file d’attente de destination. Si ce n’est pas fourni, le paramètre SourceLock est supposé contrôler les deux files d’attente. S’il est fourni, ce verrou est toujours acquis après le paramètre SourceLock . Si la liste de destination a un verrou de rotation distinct, le verrou de rotation d’annulation à l’échelle du système est d’abord acquis afin de déplacer les irps et de permettre la mise à jour du verrou de rotation KSQUEUE_SPINLOCK_IRP_STORAGE().

[in] ListLocation

Indique si les IRP doivent être énumérés à partir de la tête ou de la fin de la file d’attente source. Tous les IRP déplacés sont placés à l’extrémité opposée de la file d’attente de destination afin que l’ordre soit maintenu.

[in] ListCallback

Spécifie la fonction KStrIrpListCallback définie par minidriver à appeler pour indiquer si un IRP spécifique doit être déplacé de SourceList vers DestinationList ou si l’énumération doit être terminée.

[in] Context

Contexte passé à ListCallback.

Valeur retournée

Retourne STATUS_SUCCESS si la liste a été entièrement énumérée ; dans le cas contraire, retourne tout avertissement ou erreur retourné par la fonction de rappel KStrIrpListCallback définie par minidriver qui a interrompu l’énumération.

Remarques

Un IRP est déplacé si la fonction KStrIrpListCallback indique qu’il doit être déplacé, s’il est actuellement acquis. Si KStrIrpListCallback retourne STATUS_SUCCESS, l’IRP est déplacé. S’il retourne STATUS_NO_MATCH, l’IRP n’est pas déplacé. Toute autre valeur d’avertissement ou d’erreur de retour met fin à l’énumération et est retournée par la fonction. La valeur STATUS_NO_MATCH ne doit pas être retournée en tant qu’erreur par KStrIrpListCallback. KStrIrpListCallback est appelé au DISPATCH_LEVEL. KStrIrpListCallback est toujours appelé au moins une fois à la fin avec une valeur IRP NULL pour terminer l’énumération de liste.

KsMoveIrpsOnCancelableQueue continue dans la liste jusqu’à ce que la fonction de rappel indique que la recherche doit être terminée ou que la fin de la liste soit atteinte. KsMoveIrpsOnCancelableQueue réduit l’utilisation du verrou de rotation d’annulation à l’échelle du système en utilisant les verrous de rotation fournis pour synchroniser l’accès lorsque cela est possible. KsMoveIrpsOnCancelableQueue n’autorise pas la modification de la routine d’annulation lors du déplacement des IRPs.

La fonction peut être appelée à DISPATCH_LEVEL ou à une version inférieure.

Configuration requise

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

Voir aussi

KStrIrpListCallback