structure FS_FILTER_CALLBACKS (ntifs.h)

La structure FS_FILTER_CALLBACKS contient les points d’entrée des routines de rappel de notification fournies par l’appelant.

Syntaxe

typedef struct _FS_FILTER_CALLBACKS {
  ULONG                          SizeOfFsFilterCallbacks;
  ULONG                          Reserved;
  PFS_FILTER_CALLBACK            PreAcquireForSectionSynchronization;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
  PFS_FILTER_CALLBACK            PreReleaseForSectionSynchronization;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
  PFS_FILTER_CALLBACK            PreAcquireForCcFlush;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
  PFS_FILTER_CALLBACK            PreReleaseForCcFlush;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
  PFS_FILTER_CALLBACK            PreAcquireForModifiedPageWriter;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
  PFS_FILTER_CALLBACK            PreReleaseForModifiedPageWriter;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
  PFS_FILTER_CALLBACK            PreQueryOpen;
  PFS_FILTER_COMPLETION_CALLBACK PostQueryOpen;
} FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;

Membres

SizeOfFsFilterCallbacks

Taille de cette structure, en octets. Défini sur sizeof(FS_FILTER_CALLBACKS). SizeOfFsFilterCallbacks ne doit pas être défini sur zéro.

Reserved

Réservé. Ne pas utiliser.

PreAcquireForSectionSynchronization

Pointeur vers une FS_FILTER_CALLBACK routine PreAcquireForSectionSynchronization .

PostAcquireForSectionSynchronization

Pointeur vers une FS_FILTER_CALLBACK routine PostAcquireForSectionSynchronization .

PreReleaseForSectionSynchronization

Pointeur vers une FS_FILTER_CALLBACK routine PreReleaseForSectionSynchronization .

PostReleaseForSectionSynchronization

Pointeur vers une FS_FILTER_CALLBACK routine PostReleaseForSectionSynchronization .

PreAcquireForCcFlush

Pointeur vers une routine PreAcquireForCcFlush FS_FILTER_CALLBACK.

PostAcquireForCcFlush

Pointeur vers une routine PostAcquireForCcFlush FS_FILTER_CALLBACK.

PreReleaseForCcFlush

Pointeur vers une FS_FILTER_CALLBACK routine PreReleaseForCcFlush .

PostReleaseForCcFlush

Pointeur vers une routine PostReleaseForCcFlush FS_FILTER_CALLBACK.

PreAcquireForModifiedPageWriter

Pointeur vers une routine PreAcquireForModifiedPageWriter FS_FILTER_CALLBACK.

PostAcquireForModifiedPageWriter

Pointeur vers une routine PostAcquireForModifiedPageWriter FS_FILTER_CALLBACK.

PreReleaseForModifiedPageWriter

Pointeur vers une FS_FILTER_CALLBACK routine PreReleaseForModifiedPageWriter .

PostReleaseForModifiedPageWriter

Pointeur vers une routine PostReleaseForModifiedPageWriter FS_FILTER_CALLBACK.

PreQueryOpen

Pointeur vers une FS_FILTER_CALLBACK routine PreQueryOpen .

PostQueryOpen

Pointeur vers une routine PostQueryOpen FS_FILTER_CALLBACK.

Remarques

Les pilotes de filtre de système de fichiers et les systèmes de fichiers appellent la routine FsRtlRegisterFileSystemFilterCallbacks pour inscrire les routines de rappel de notification à appeler lorsque le système de fichiers sous-jacent effectue certaines opérations.

Tous les points d’entrée de rappel sont facultatifs et peuvent avoir la valeur NULL.

La routine de rappel de filtre FS_FILTER_CALLBACK et ses paramètres sont définis comme suit :


typedef
NTSTATUS (*PFS_FILTER_CALLBACK) (
    IN PFS_FILTER_CALLBACK_DATA Data,
    OUT PVOID *CompletionContext
);

Paramètre Signification
Données Pointeur vers la structure FS_FILTER_CALLBACK_DATA pour cette opération.
CompletionContext Informations de contexte à passer à la routine de rappel de fin de filtre. Définissez la valeur NULL si aucune information de contexte ne doit être transmise ou s’il n’existe aucune routine de rappel de fin de filtre correspondante.

La routine de rappel de fin de filtre FS_FILTER_COMPLETION_CALLBACK et ses paramètres sont définis comme suit :


typedef
VOID (*PFS_FILTER_COMPLETION_CALLBACK) (
    IN PFS_FILTER_CALLBACK_DATA Data,
    IN NTSTATUS OperationStatus,
    IN PVOID CompletionContext
);

Paramètre Signification
Données Pointeur vers la structure FS_FILTER_CALLBACK_DATA pour cette opération.
OperationStatus État de l’opération. Si le système de fichiers a effectué l’opération, ce paramètre est défini sur STATUS_SUCCESS. Sinon, il est défini sur une valeur d’erreur status appropriée.
CompletionContext Informations de contexte définies dans la routine de rappel de filtre. Cette valeur est définie sur NULL si aucune information n’est transmise ou s’il n’existe aucune routine de rappel de filtre correspondante.

Les routines de rappel sont définies pour les opérations suivantes :

Opération Routines de rappel de notification
Le gestionnaire de mémoire acquiert un fichier exclusivement avant de créer une section mappée en mémoire pour une partie du fichier. Pour cette opération, SyncType est défini sur SyncTypeCreateSection. PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization
Le gestionnaire de mémoire libère un fichier après avoir créé une section mappée en mémoire pour une partie du fichier. PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization
Un composant de noyau (tel que le gestionnaire de cache) acquiert un fichier exclusivement avant de désactiver temporairement la création de section pour une partie du fichier. Pour cette opération, SyncType est défini sur SyncTypeOther. PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization. PreAcquireForSectionSynchronization doit toujours retourner un code de réussite status (tel que STATUS_SUCCESS) pour cette opération.
Un composant de noyau (tel que le gestionnaire de cache) libère un fichier après avoir temporairement désactivé la création de section pour une partie du fichier. PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization
Le gestionnaire de cache acquiert un fichier exclusivement avant de vider une partie du fichier du cache. PreAcquireForCcFlush, PostAcquireForCcFlush
Le gestionnaire de cache libère un fichier après avoir vidé une partie du fichier du cache. PreReleaseForCcFlush, PostReleaseForCcFlush
Le rédacteur de page modifié acquiert un fichier exclusivement avant d’écrire une partie du fichier sur le disque. PreAcquireForModifiedPageWriter, PostAcquireForModifiedPageWriter
L’enregistreur de pages modifié libère un fichier après avoir écrit une partie du fichier sur le disque. PreReleaseForModifiedPageWriter, PostReleaseForModifiedPageWriter
Un composant interroge les informations de fichier par nom sans ouvrir le fichier. Les redirecteurs ne seront jamais appelés avec cette requête et n’ont donc pas besoin d’implémenter des rappels PreQueryOpen ou PostQueryOpen. PreQueryOpen, PostQueryOpen

La routine de rappel de notification de filtre est appelée avant que la demande d’opération ne soit transmise aux pilotes de filtre de niveau inférieur et au système de fichiers sous-jacent. Dans la routine de rappel, le pilote de filtre doit effectuer tout traitement nécessaire et retourner immédiatement STATUS_SUCCESS. Si la routine de rappel d’un pilote de filtre retourne une valeur status autre que STATUS_SUCCESS, cela entraîne l’échec de la demande d’opération. L’échec répété de certaines demandes, comme le verrouillage des demandes, peut arrêter la progression du système. Par conséquent, les pilotes de filtre ne doivent échouer une telle requête que si cela est absolument nécessaire. En cas d’échec de ces demandes, le pilote de filtre doit retourner une valeur d’erreur status qui décrit l’erreur aussi complètement et précisément que possible.

Notes

La routine de rappel de notification d’un pilote de filtre ne peut pas faire échouer une demande de libération d’une ressource de système de fichiers. Si un pilote de filtre retourne une valeur status autre que STATUS_SUCCESS de l’une des routines de rappel de notification suivantes, la valeur status est ignorée.

  • PreReleaseForSectionSynchronization
  • PreReleaseForCcFlush
  • PreReleaseForModifiedPageWriter

La routine de rappel de fin de filtre est appelée une fois la demande d’opération passée aux pilotes de filtre de niveau inférieur et au système de fichiers sous-jacent. Dans la routine de rappel d’achèvement, le pilote de filtre doit effectuer tout traitement nécessaire et retourner immédiatement.

Configuration requise

Condition requise Valeur
En-tête ntifs.h

Voir aussi

FS_FILTER_CALLBACK_DATA

FsRtlRegisterFileSystemFilterCallbacks