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 |