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 |