Freigeben über


RxFinalizeNetFcb-Funktion (rxprocs.h)

RxFinalizeNetFCB schließt die angegebene FCB-Struktur ab. Der Anrufer muss über eine exklusive Sperre für die NET_ROOT verfügen, die mit FCB verbunden ist.

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 Fertigstellung rekursiv durchgeführt werden soll.

[in] ForceFinalize

Der Wert, der angibt, ob die Fertigstellung erzwungen werden soll, unabhängig von der Referenzanzahl.

Wenn dieser Parameter FALSEist, muss der NodeReferenceCount Mitglied des FCB 1 sein, damit der FCB abgeschlossen werden kann.

[in] ReferenceCount

Die Referenzanzahl auf dem FCB, die weiterhin die erzwungene Finalisierung zulassen wird.

Rückgabewert

RxFinalizeNetFCB gibt TRUE- bei Erfolg zurück oder FALSE-, wenn die Fertigstellung nicht aufgetreten ist:

Bemerkungen

Die RxFinalizeNetFCB Routine wird normalerweise nicht direkt von Netzwerk-Miniumleitungstreibern aufgerufen. RDBSS ruft diese Routine intern auf, wenn ein E/A-Anforderungspaket für IRP_MJ_CLOSE empfangen wird. Dieses IRP wird normalerweise von RDBSS als Reaktion auf eine Benutzermodusanwendung empfangen, die einen Dateischließvorgang anfordert. Es ist auch möglich, dass ein anderer Kerneltreiber ein solches IRP ausgibt.

Die Nahbehandlungsstrategie in RDBSS basiert auf dem Axiom, das die Workload auf dem Server möglichst minimiert werden sollte. 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 wird gelesen, die Datei wird geschlossen, und derselbe Satz von Vorgängen wird immer wieder wiederholt.

Dies wird in RDBSS durch eine verzögerte Verarbeitung der Close-Anforderung behandelt. Es liegt eine Verzögerung von ca. 10 Sekunden zwischen abschluss der Anforderung und dem Initiieren der Verarbeitung bei der schließenden Anforderung vor. Dadurch wird ein Fenster geöffnet, in dem ein nachfolgender Geöffneter Vorgang auf eine vorhandene SRV_OPEN reduziert werden kann. Das Zeitintervall kann an diese Anforderungen angepasst werden.

Vor dem Aufrufen RxFinalizeNetFCBmuss eine Sperre der FCB-Struktur im exklusiven Modus erworben werden.

Wenn der RecursiveFinalize Parameter FALSEist, schlägt RxFinalizeNetFCB- fehl, wenn es ausstehende Verweise auf den FCB gibt (die OpenCount oder CleanCount Member der FCB-Struktur sind ungleich Null).

Wenn der ForceFinalize Parameter TRUEist, RxFinalizeNetFCB bewirkt, dass das System bei überprüften Builds ASSERTION ausführt.

Nach rekursiver Finalisierung könnte die dem FCB zugeordnete Referenzanzahl höchstens 1 sein, um weitere Finalisierungen zu erhalten. Diese letzte Bezugsanzahl gehört zur Präfixnamenstabelle der NET_ROOT. Die tatsächliche Finalisierung ist in zwei Teile unterteilt:

  • wenn die Bezugsanzahl gleich 1 ist oder der ForceFinalize Parameter TRUEwurde, RxFinalizeNetFCB den FCB abgeschlossen.
  • Wenn die Referenzanzahl auf Null geht, wird der FCB abgeschlossen und der für den FCB verwendete Speicher wird ebenfalls freigegeben.

Anforderungen

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

Siehe auch

RxCreateNetFcb

RxCreateNetFobx-

RxCreateNetRoot-

RxCreateSrvCall-

RxCreateSrvOpen

RxCreateVNetRoot-

RxDereference-

RxFinalizeConnection-

RxFinalizeNetFobx-

RxFinalizeNetRoot-

RxFinalizeSrvCall

RxFinalizeSrvOpen

RxFinalizeVNetRoot-

RxFinishFcbInitialization

RxForceFinalizeAllVNetRoots

RxReference-

RxSetSrvCallDomainName

RxpDereferenceNetFcb

RxpReferenceNetFcb

Die FCB-Struktur