Fonction FltCbdqRemoveIo (fltkernel.h)
FltCbdqRemoveIo supprime un élément particulier de la file d’attente de données de rappel d’un pilote minifilter.
Syntaxe
PFLT_CALLBACK_DATA FLTAPI FltCbdqRemoveIo(
[in, out] PFLT_CALLBACK_DATA_QUEUE Cbdq,
[in] PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context
);
Paramètres
[in, out] Cbdq
Pointeur vers une file d’attente de données de rappel cancel-safe. Cette file d’attente doit avoir été initialisée en appelant FltCbdqInitialize.
[in] Context
Pointeur de contexte pour l’élément à supprimer. Ce contexte est initialisé par FltCbdqInsertIo lorsque la demande d’E/S est insérée pour la première fois dans la file d’attente. Ce paramètre est obligatoire et doit être non NULL.
Valeur retournée
FltCbdqRemoveIo retourne un pointeur vers la structure de données de rappel pour la demande d’E/S qui a été supprimée de la file d’attente. Si aucune demande d’E/S correspondante n’est trouvée ou si la file d’attente est vide, FltCbdqRemoveIo retourne NULL.
Remarques
FltCbdqRemoveIo supprime la structure de données de rappel (FLT_CALLBACK_DATA) pour une opération d’E/S particulière de la file d’attente de données de rappel d’un pilote minifiltre. FltCbdqRemoveIo ne peut être utilisé que pour supprimer une structure de données de rappel associée à une structure de contexte . Cette association est créée lorsque la structure de données de rappel est insérée dans la file d’attente de données de rappel par FltCbdqInsertIo.
Les pilotes Minifilter peuvent utiliser les routines FltCbdqXxx pour implémenter une file d’attente de données de rappel pour les opérations d’E/S basées sur IRP. En utilisant ces routines, les pilotes minifilter peuvent rendre leurs files d’attente cancel-safe ; le système gère en toute transparence l’annulation des E/S pour les pilotes minifilter.
Les routines FltCbdqXxx ne peuvent être utilisées que pour les opérations d’E/S basées sur IRP. Pour déterminer si une structure de données de rappel donnée représente une opération d’E/S basée sur IRP, utilisez la macro FLT_IS_IRP_OPERATION .
Une file d’attente de données de rappel est initialisée par FltCbdqInitialize. FltCbdqRemoveIo utilise les routines fournies dans la table de répartition de la file d’attente pour verrouiller la file d’attente et supprimer la structure de données de rappel de la file d’attente. L’opération de suppression elle-même est effectuée par la routine de rappel CbdqRemoveIo du pilote minifilter.
Si la file d’attente est protégée par un verrou de rotation plutôt qu’un objet mutex ou une variable de ressource, l’appelant de FltCbdqRemoveIo peut s’exécuter sur IRQL <= DISPATCH_LEVEL. Si un mutex ou une ressource est utilisé, l’appelant doit s’exécuter sur IRQL <= APC_LEVEL.
Il existe une course potentielle entre le gestionnaire de filtres qui supprime une demande d’E/S annulée et le pilote de filtre qui la supprime parce qu’elle a été effectuée. Il est important de noter que le contexte de la demande reste valide après sa première suppression, ce qui entraîne l’échec d’une deuxième tentative de suppression.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
En-tête | fltkernel.h (inclure Fltkernel.h) |
IRQL | Consultez la section Notes. |