Partager via


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é. N’utilisez pas.

PreAcquireForSectionSynchronization

Pointeur vers une routine FS_FILTER_CALLBACK PreAcquireForSectionSynchronization.

PostAcquireForSectionSynchronization

Pointeur vers une routine FS_FILTER_CALLBACK PostAcquireForSectionSynchronization.

PreReleaseForSectionSynchronization

Pointeur vers une routine FS_FILTER_CALLBACK PreReleaseForSectionSynchronization.

PostReleaseForSectionSynchronization

Pointeur vers une routine FS_FILTER_CALLBACK PostReleaseForSectionSynchronization.

PreAcquireForCcFlush

Pointeur vers une routine FS_FILTER_CALLBACK PreAcquireForCcFlush.

PostAcquireForCcFlush

Pointeur vers une routine FS_FILTER_CALLBACK PostAcquireForCcFlush.

PreReleaseForCcFlush

Pointeur vers une routine FS_FILTER_CALLBACK PreReleaseForCcFlush.

PostReleaseForCcFlush

Pointeur vers une routine FS_FILTER_CALLBACK PostReleaseForCcFlush.

PreAcquireForModifiedPageWriter

Pointeur vers une routine FS_FILTER_CALLBACK PreAcquireForModifiedPageWriter.

PostAcquireForModifiedPageWriter

Pointeur vers une routine FS_FILTER_CALLBACK PostAcquireForModifiedPageWriter.

PreReleaseForModifiedPageWriter

Pointeur vers une routine FS_FILTER_CALLBACK PreReleaseForModifiedPageWriter.

PostReleaseForModifiedPageWriter

Pointeur vers une routine FS_FILTER_CALLBACK PostReleaseForModifiedPageWriter.

PreQueryOpen

Pointeur vers une routine FS_FILTER_CALLBACK PreQueryOpen.

PostQueryOpen

Pointeur vers une routine FS_FILTER_CALLBACK PostQueryOpen.

Remarques

Les pilotes de filtre de système de fichiers et les systèmes de fichiers appellent les FsRtlRegisterFileSystemFilterCallbacks routine 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 être 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
de données Pointeur vers la structure FS_FILTER_CALLBACK_DATA pour cette opération.
CompletionContext Informations de contexte à passer à la routine de rappel de saisie semi-automatique du filtre. Défini sur NULL si aucune information de contexte n’est transmise ou s’il n’existe aucune routine de rappel de saisie semi-automatique 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
de 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 correctement effectué l’opération, ce paramètre est défini sur STATUS_SUCCESS. Sinon, il est défini sur une valeur d’état d’erreur 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 d’état de réussite (par exemple, 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 à partir du cache. PreAcquireForCcFlush, PostAcquireForCcFlush
Le gestionnaire de cache libère un fichier après avoir vidé une partie du fichier à partir du cache. PreReleaseForCcFlush, PostReleaseForCcFlush
L’enregistreur de pages 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 soit passée 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 d’état autre que STATUS_SUCCESS, cela entraîne l’échec de la demande d’opération. Une défaillance répétée de certaines demandes, telles que le verrouillage des demandes, peut interrompre la progression du système. Par conséquent, les pilotes de filtre doivent échouer à une telle requête uniquement si nécessaire. En cas d’échec de ces requêtes, le pilote de filtre doit retourner une valeur d’état d’erreur qui décrit l’erreur aussi complètement et précisément que possible.

Note

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

  • PreReleaseForSectionSynchronization
  • PreReleaseForCcFlush
  • PreReleaseForModifiedPageWriter

La routine de rappel de saisie semi-automatique 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.

Exigences

Exigence Valeur
d’en-tête ntifs.h

Voir aussi

FS_FILTER_CALLBACK_DATA

FsRtlRegisterFileSystemFilterCallbacks