Fonction RxFinalizeNetFcb (rxprocs.h)
RxFinalizeNetFCB finalise la structure FCB donnée. L’appelant doit disposer d’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 est FALSE, le NodeReferenceCount membre du FCB doit être 1 pour que le FCB soit finalisé.
[in] ReferenceCount
Le nombre de références sur le FCB qui permettra toujours la finalisation forcée.
Valeur de retour
RxFinalizeNetFCB retourne TRUE sur la réussite ou FAUX si la finalisation n’a pas eu lieu :
Remarques
La routine RxFinalizeNetFCB n’est normalement pas appelée par les pilotes de mini-redirecteur réseau directement. RDBSS appelle cette routine en interne lorsqu’un paquet de requête d’E/S est reçu pour IRP_MJ_CLOSE. Ce protocole 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 étroite dans RDBSS est prédicée sur l’axiome que la charge de travail sur le serveur doit être réduite autant 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 ces cas, le même fichier est ouvert, une ligne à partir d’une mémoire tampon est lue, le fichier est fermé et le même ensemble d’opérations est répété et à nouveau.
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 sur la demande de fermeture. Cela ouvre une fenêtre pendant laquelle une opération ouverte ultérieure peut être réduite sur un SRV_OPEN existant. L’intervalle de temps peut être réglé 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 est FALSE, RxFinalizeNetFCB échoue s’il existe des références en attente au FCB (le OpenCount ou CleanCount membres de la structure FCB ne sont pas zéro).
Si le paramètre ForceFinalize est 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é au FCB peut être au maximum 1 pour la finalisation ultérieure. Ce nombre de références finals appartient à la table de noms de préfixe du NET_ROOT. La finalisation réelle est divisée en deux parties :
- si le nombre de références est égal à 1 ou que le paramètre ForceFinalize a été 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.
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Bureau |
d’en-tête | rxprocs.h (include Rxprocs.h) |
IRQL | <= APC_LEVEL |