Partager via


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

Voir aussi

RxCreateNetFcb

RxCreateNetFobx

RxCreateNetRoot

RxCreateSrvCall

RxCreateSrvOpen

RxCreateVNetRoot

RxDereference

RxFinalizeConnection

RxFinalizeNetFobx

RxFinalizeNetRoot

RxFinalizeSrvCall

RxFinalizeSrvOpen

RxFinalizeVNetRoot

RxFinishFcbInitialization

RxForceFinalizeAllVNetRoots

RxReference

RxSetSrvCallDomainName

RxpDereferenceNetFcb

RxpReferenceNetFcb

The FCB Structure