Freigeben über


RxFinalizeNetFcb-Funktion (rxprocs.h)

RxFinalizeNetFCB finalisiert die angegebene FCB-Struktur. Der Aufrufer muss über eine exklusive Sperre für die dem FCB zugeordnete NET_ROOT verfügen.

Syntax

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

Parameter

[out] ThisFcb

Ein Zeiger auf die FCB-Struktur, die abgeschlossen werden soll.

[in] RecursiveFinalize

Der Wert, der angibt, ob die Finalisierung rekursiv erfolgen soll.

[in] ForceFinalize

Der Wert, der angibt, ob die Finalisierung erzwungen werden soll, unabhängig von der Verweisanzahl.

Wenn dieser Parameter FALSE ist, muss das NodeReferenceCount-Mitglied des FCB 1 sein, damit der FCB finalisiert wird.

[in] ReferenceCount

Die Referenzanzahl für den FCB, die weiterhin eine erzwungene Finalisierung zulassen wird.

Rückgabewert

RxFinalizeNetFCB gibt TRUE bei Erfolg oder FALSE zurück, wenn die Finalisierung nicht erfolgt ist:

Hinweise

Die RxFinalizeNetFCB-Routine wird normalerweise nicht direkt von Netzwerk-Mini-Redirector-Treibern aufgerufen. RDBSS ruft diese Routine intern auf, wenn ein E/A-Anforderungspaket für IRP_MJ_CLOSE empfangen wird. Diese IRP wird normalerweise von RDBSS als Reaktion auf eine Benutzermodusanwendung empfangen, die einen Vorgang zum Schließen der Datei anfordert. Es ist auch möglich, dass ein anderer Kerneltreiber eine solche IRP ausgibt.

Die Strategie für die enge Verarbeitung in RDBSS basiert auf dem Axiom, dass die Workload auf dem Server möglichst minimiert werden soll. Es gibt eine Reihe von Anwendungen, die dieselbe Datei wiederholt schließen und öffnen (z. B. Batchdateiverarbeitung). In diesen Fällen wird dieselbe Datei geöffnet, eine Zeile aus einem Puffer gelesen, die Datei geschlossen, und derselbe Satz von Vorgängen wird immer wieder wiederholt.

Dies wird in RDBSS durch eine verzögerte Verarbeitung der Close-Anforderung behandelt. Zwischen dem Abschluss der Anforderung und dem Initiieren der Verarbeitung für die schließende Anforderung liegt eine Verzögerung von etwa 10 Sekunden. Dadurch wird ein Fenster geöffnet, in dem ein nachfolgender geöffneter Vorgang auf eine vorhandene SRV_OPEN reduziert werden kann. Das Zeitintervall kann so eingestellt werden, dass diese Anforderungen erfüllt werden.

Vor dem Aufrufen von RxFinalizeNetFCB muss eine Sperre für die FCB-Struktur im exklusiven Modus erworben werden.

Wenn der RecursiveFinalize-Parameter FALSE ist, schlägt RxFinalizeNetFCB fehl, wenn ausstehende Verweise auf den FCB vorhanden sind (die OpenCount- oder CleanCount-Member der FCB-Struktur sind ungleich 0).

Wenn der ForceFinalize-Parameter TRUE ist, bewirkt RxFinalizeNetFCB, dass das System bei überprüften Builds ASSERT ausführt.

Nach der rekursiven Finalisierung kann die dem FCB zugeordnete Referenzanzahl höchstens 1 sein, damit eine weitere Finalisierung erfolgen kann. Diese letzte Verweisanzahl gehört zur Präfixnamenstabelle des NET_ROOT. Die eigentliche Finalisierung gliedert sich in zwei Teile:

  • Wenn die Verweisanzahl gleich 1 oder der ForceFinalize-ParameterTRUE ist, schließt RxFinalizeNetFCB den FCB ab.
  • wenn die Referenzanzahl auf 0 geht, wird der FCB abgeschlossen, und der für den FCB verwendete Speicher wird ebenfalls freigegeben.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile rxprocs.h (include Rxprocs.h)
IRQL <= APC_LEVEL

Weitere Informationen

RxCreateNetFcb

RxCreateNetFobx

RxCreateNetRoot

RxCreateSrvCall

RxCreateSrvOpen

RxCreateVNetRoot

RxDereference

RxFinalizeConnection

RxFinalizeNetFobx

RxFinalizeNetRoot

RxFinalizeSrvCall

RxFinalizeSrvOpen

RxFinalizeVNetRoot

RxFinishFcbInitialisierung

RxForceFinalizeAllVNetRoots

RxReference

RxSetSrvCallDomainName

RxpDereferenceNetFcb

RxpReferenceNetFcb

Die FCB-Struktur