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 |