Funzione RxFinalizeNetFcb (rxprocs.h)

RxFinalizeNetFCB finalizza la struttura FCB specificata. Il chiamante deve avere un blocco esclusivo sul NET_ROOT associato a FCB.

Sintassi

BOOLEAN RxFinalizeNetFcb(
  [out] OUT PFCB   ThisFcb,
  [in]  IN BOOLEAN RecursiveFinalize,
  [in]  IN BOOLEAN ForceFinalize,
  [in]  IN LONG    ReferenceCount
);

Parametri

[out] ThisFcb

Puntatore alla struttura FCB da finalizzare.

[in] RecursiveFinalize

Valore che indica se la finalizzazione deve essere eseguita in modo ricorsivo.

[in] ForceFinalize

Valore che indica se la finalizzazione deve essere forzata, indipendentemente dal conteggio dei riferimenti.

Se questo parametro è FALSE, il membro NodeReferenceCount dell'FCB deve essere 1 per l'oggetto FCB da finalizzare.

[in] ReferenceCount

Conteggio dei riferimenti sul fcB che consentirà comunque la finalizzazione forzata.

Valore restituito

RxFinalizeNetFCB restituisceTRUE in caso di esito positivo o FALSE se la finalizzazione non è stata eseguita:

Commenti

La routine RxFinalizeNetFCB non viene in genere chiamata direttamente dai driver mini-redirector di rete. RDBSS chiama questa routine internamente quando viene ricevuto un pacchetto di richiesta di I/O per IRP_MJ_CLOSE. Questa IRP viene normalmente ricevuta da RDBSS in risposta a un'applicazione in modalità utente che richiede un'operazione di chiusura del file. È anche possibile che un altro driver del kernel esecchi tale IRP.

La strategia di gestione vicina in RDBSS è predicata sull'axiom che il carico di lavoro nel server deve essere ridotto al minimo e quando possibile. Esistono diverse applicazioni che si chiudeno ripetutamente e aprono lo stesso file (ad esempio l'elaborazione di file batch). In questi casi viene aperto lo stesso file, viene letto una riga da un buffer, il file viene chiuso e lo stesso set di operazioni viene ripetuto più e più volte.

Questo viene gestito in RDBSS da un'elaborazione ritardata della richiesta di chiusura. Si verifica un ritardo di circa 10 secondi tra il completamento della richiesta e l'avvio dell'elaborazione sulla richiesta di chiusura. Verrà aperta una finestra durante la quale è possibile comprimere un'operazione aperta successiva su un SRV_OPEN esistente. L'intervallo di tempo può essere ottimizzato per soddisfare questi requisiti.

Prima di chiamare RxFinalizeNetFCB, è necessario acquisire un blocco nella struttura FCB in modalità esclusiva.

Se il parametro RecursiveFinalize è FALSE, RxFinalizeNetFCB avrà esito negativo se sono presenti riferimenti in sospeso al fcB (i membri OpenCount o CleanCount della struttura FCB non sono zero).

Se il parametro ForceFinalize è TRUE, RxFinalizeNetFCB causa l'asserzione del sistema nelle build controllate.

Dopo la finalizzazione ricorsiva, il conteggio dei riferimenti associato al FCB potrebbe essere al massimo 1 per un'ulteriore finalizzazione. Questo conteggio di riferimenti finale appartiene alla tabella dei nomi del prefisso della NET_ROOT. La finalizzazione effettiva è divisa in due parti:

  • se il conteggio dei riferimenti è uguale a 1 o il parametro ForceFinalize è TRUE, RxFinalizeNetFCB finalizza l'FCB.
  • se il conteggio dei riferimenti passa a zero, il fcB viene finalizzato e la memoria usata per il fcB viene rilasciata anche.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione rxprocs.h (includere Rxprocs.h)
IRQL <= APC_LEVEL

Vedi anche

RxCreateNetFcb

RxCreateNetFobx

RxCreateNetRoot

RxCreateSrvCall

RxCreateSrvOpen

RxCreateVNetRoot

RxDereference

RxFinalizeConnection

RxFinalizeNetFobx

RxFinalizeNetRoot

RxFinalizeSrvCall

RxFinalizeSrvOpen

RxFinalizeVNetRoot

RxFinishFcbInitialization

RxForceFinalizeAllVNetRoots

RxReference

RxSetSrvCallDomainName

RxpDereferenceNetFcb

RxpReferenceNetFcb

Struttura FCB