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 |