Partager via


FSCTL_SET_PURGE_FAILURE_MODE IOCTL (ntifs.h)

Le Gestionnaire de filtres utilise le code de contrôle FSCTL_SET_PURGE_FAILURE_MODE pour synchroniser les opérations pendant la durée de vie d’une section créée pour l’analyse des données. Les filtres ne doivent jamais émettre ce code de contrôle.

Code principal

IRP_MJ_DEVICE_CONTROL

Mémoire tampon d'entrée

Structure SET_PURGE_FAILURE_MODE_INPUT .

Longueur de la mémoire tampon d’entrée

Taille en octets de SET_PURGE_FAILURE_MODE_INPUT.

Mémoire tampon de sortie

None

Longueur de la mémoire tampon de sortie

n/a

Mémoire tampon d’entrée/sortie

None

Longueur de la mémoire tampon d’entrée/sortie

n/a

Bloc d’état

Réservé pour le système.

Remarques

Le Gestionnaire de filtres utilise ce code de contrôle avec IRP_MJ_FILE_SYSTEM_CONTROL appels pour mettre entre crochets la durée de vie de la section. Ces appels permettent d’indiquer à un système de fichiers (et, rarement, aux minifiltres) de se comporter de la manière suivante s’il ne parvient pas à vider les caches du Gestionnaire de cache.

Pour chaque FSCTL_SET_PURGE_FAILURE_MODE émis avec SET_PURGE_FAILURE_MODE_ENABLED défini, un FSCTL_SET_PURGE_FAILURE_MODE est émis avec l’ensemble de SET_PURGE_FAILURE_MODE_DISABLED. Bien qu’il existe un SET_PURGE_FAILURE_MODE_ENABLED en suspens, filter Manager répond comme suit à certains états d’échec pour certains types d’opérations (voir le tableau ci-dessous) :

• Met en attente l’opération, accélérant la fermeture de la section (dans la cas où cela est possible) • Requeue l’opération dans le minifiltre ou le système de fichiers qui a émis l’échec

Pour déclencher la réponse du Gestionnaire de filtres en conséquence, le système de fichiers (ou le filtre) répond à un échec de purge d’une section des manières suivantes :

Opération Status de retour requis
IRP_MJ_CREATE (opérations destructrices) STATUS_USER_MAPPED_FILE
IRP_MJ_WRITE (opérations sans débogage uniquement) STATUS_PURGE_FAILED
IRP_MJ_SET_INFORMATION STATUS_PURGE_FAILED

Ces états ne doivent être retournés que lorsqu’il y a un SET_PURGE_FAILURE_MODE_ENABLED en suspens (aucun SET_PURGE_FAILURE_MODE_DISABLED d’équilibrage reçu). Dans tous les autres cas, les états d’erreur sont retournés à l’application.

Pour toute autre opération (pour instance, une écriture mise en cache), si le système de fichiers (ou le filtre) ne parvient pas à vider une section alors qu’une FSCTL_SET_PURGE_FAILURE_MODE est en attente de l’opération et de la réédition lorsque le nombre de FSCTL_SET_PURGE_FAILURE_MODE en suspens tombe à zéro. Si le système de fichiers (ou le filtre) retourne simplement un status d’échec (y compris ceux répertoriés ci-dessus), cette status sera retournée à l’application.

Le status d’erreur est traité entièrement dans le Gestionnaire de filtres, tout comme la mise en file d’attente de l’opération ayant échoué. Cela signifie que ni l’un ni l’autre ne sont visibles par les filtres, ce qui a les implications importantes suivantes :

  • Les outils de surveillance du système de fichiers tels que Process Monitor ne rapportent pas ces opérations.
  • Si un filtre supérieur doit être impliqué pour que l’opération réédurée réussisse, l’opération mise en file d’attente échoue. Dans ce cas, les enregistreurs de filtres sont nécessaires pour s’assurer que ce deuxième filtre retourne le status d’échec.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8
En-tête ntifs.h

Voir aussi

SET_PURGE_FAILURE_MODE_INPUT