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 retournée par la fonction KStrIrpListCall back définie par le 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 IRPs.

[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 paramètre 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 d’autoriser le verrouillage de rotation KSQUEUE_SPINLOCK_IRP_STORAGE() à être mis à jour.

[in] ListLocation

Indique si les fournisseurs d’intégration doivent être énumérés à partir de la tête ou de la fin de la file d’attente source. Les adresses IP virtuelles déplacées sont placées sur la fin opposée de la file d’attente de destination afin que l’ordre soit conservé.

[in] ListCallback

Spécifie la fonction KStrIrpListCall back définie par minidriver pour indiquer si un IRP spécifique doit être déplacé de SourceList à DestinationList, ou si l’énumération doit être arrêtée.

[in] Context

Contexte passé à ListCallback .

Valeur de retour

Retourne STATUS_SUCCESS si la liste a été complètement énumérée ; sinon, retourne tout avertissement ou erreur retourné par le minidriver défini KStrIrpListCallback fonction de rappel qui a interrompu l’énumération.

Remarques

Un IRP est déplacé si la fonction KStrIrpListCallback indique qu’elle doit être déplacée, qu’elle soit actuellement acquise. Si KStrIrpListCallback retourne STATUS_SUCCESS, l’IRP est déplacé. Si elle 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é à DISPATCH_LEVEL. KStrIrpListCallback est toujours appelée au moins une fois à la fin avec une valeur NULL IRP 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 est atteinte. KsMoveIrpsOnCancelableQueue réduit l’utilisation du verrou de rotation d’annulation à l’échelle du système à l’aide des 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 inférieure.

Exigences

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

Voir aussi

KStrIrpListCallback