Fonction RxFinalizeNetFcb (rxprocs.h)
RxFinalizeNetFCB finalise la structure FCB donnée. L’appelant doit avoir un verrou exclusif sur le NET_ROOT associé à FCB.
Syntaxe
BOOLEAN RxFinalizeNetFcb(
[out] OUT PFCB ThisFcb,
[in] IN BOOLEAN RecursiveFinalize,
[in] IN BOOLEAN ForceFinalize,
[in] IN LONG ReferenceCount
);
Paramètres
[out] ThisFcb
Pointeur vers la structure FCB à finaliser.
[in] RecursiveFinalize
Valeur indiquant si la finalisation doit être effectuée de manière récursive.
[in] ForceFinalize
Valeur indiquant si la finalisation doit être forcée, quel que soit le nombre de références.
Si ce paramètre a la valeur FALSE, le membre NodeReferenceCount du FCB doit être 1 pour que le FCB soit finalisé.
[in] ReferenceCount
Nombre de références sur le FCB qui autorise toujours la finalisation forcée.
Valeur retournée
RxFinalizeNetFCB retourne TRUE en cas de réussite ou FALSE si la finalisation n’a pas eu lieu :
Remarques
La routine RxFinalizeNetFCB n’est normalement pas appelée directement par les pilotes de mini-redirecteur réseau. RDBSS appelle cette routine en interne lorsqu’un paquet de demande d’E/S est reçu pour IRP_MJ_CLOSE. Ce IRP est normalement reçu par RDBSS en réponse à une application en mode utilisateur demandant une opération de fermeture de fichier. Il est également possible pour un autre pilote de noyau d’émettre un tel IRP.
La stratégie de gestion rapprochée dans RDBSS repose sur l’axiome selon lequel la charge de travail sur le serveur doit être réduite au fur et à mesure que possible. Il existe un certain nombre d’applications qui ferment et ouvrent à plusieurs reprises le même fichier (traitement de fichiers par lots, par exemple). Dans ce cas, le même fichier est ouvert, une ligne d’une mémoire tampon est lue, le fichier est fermé et le même ensemble d’opérations est répété encore et encore.
Cela est géré dans RDBSS par un traitement différé de la demande de fermeture. Il existe un délai d’environ 10 secondes entre la fin de la demande et le lancement du traitement de la demande de fermeture. Cela ouvre une fenêtre au cours de laquelle une opération d’ouverture ultérieure peut être réduite sur un SRV_OPEN existant. L’intervalle de temps peut être ajusté pour répondre à ces exigences.
Avant d’appeler RxFinalizeNetFCB, un verrou sur la structure FCB doit être acquis en mode exclusif.
Si le paramètre RecursiveFinalize a la valeur FALSE, RxFinalizeNetFCB échoue s’il existe des références en suspens au FCB (les membres OpenCount ou CleanCount de la structure FCB ne sont pas zéro).
Si le paramètre ForceFinalize a la valeur TRUE, RxFinalizeNetFCB entraîne l’assertion du système sur les builds vérifiées.
Après la finalisation récursive, le nombre de références associées au fcb peut être au maximum de 1 pour la finalisation ultérieure. Ce nombre final de références appartient à la table de noms de préfixes du NET_ROOT. La finalisation réelle est divisée en deux parties :
- si le nombre de références est égal à 1 ou si le paramètre ForceFinalize a la valeur TRUE, RxFinalizeNetFCB finalise le FCB.
- si le nombre de références est égal à zéro, le FCB est finalisé et la mémoire utilisée pour le FCB est également libérée.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | rxprocs.h (inclure Rxprocs.h) |
IRQL | <= APC_LEVEL |