RxFinalizeNetFcb 函式 (rxprocs.h)

RxFinalizeNetFCB 會完成指定的FCB結構。 呼叫端必須在與FCB相關聯的NET_ROOT上擁有獨佔鎖定。

語法

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

參數

[out] ThisFcb

要完成之FCB結構的指標。

[in] RecursiveFinalize

值,指出是否應該以遞歸方式完成最終處理。

[in] ForceFinalize

值,指出不論參考計數為何,是否應該強制完成。

如果此參數為 FALSE,則 FCB 的 NodeReferenceCount 成員必須為 1,才能完成 FCB。

[in] ReferenceCount

仍然允許強制完成的FCB參考計數。

傳回值

RxFinalizeNetFCB 會在成功時傳回 TRUE ,如果未發生最終處理,則傳回 FALSE

備註

網路迷你重新導向器驅動程式通常不會直接呼叫 RxFinalizeNetFCB 例程。 當收到 I/O 要求封包以供IRP_MJ_CLOSE時,RDBSS 會在內部呼叫此例程。 RDBSS 通常會收到此 IRP,以回應要求檔案關閉作業的使用者模式應用程式。 另一個核心驅動程式也可能發出這類 IRP。

RDBSS 中的關閉處理策略是以伺服器工作負載應該盡可能最小化的先決條件來述詞。 有許多應用程式會重複關閉並開啟相同的檔案 (批處理,例如) 。 在這些情況下,會開啟相同的檔案、讀取緩衝區中的一行、關閉檔案,並重複執行相同的作業集。

這是透過延遲處理關閉要求,在 RDBSS 中處理。 完成要求與在關閉要求上起始處理之間有大約 10 秒的延遲。 這會開啟視窗,在此期間,後續的開啟作業可以折疊到現有的SRV_OPEN。 您可以調整時間間隔以符合這些需求。

在呼叫 RxFinalizeNetFCB 之前,必須以獨佔模式取得 FCB 結構的鎖定。

如果 RecursiveFinalize 參數為 FALSE,如果 FCB (OpenCount 或 CleanCount 成員的 FCB 未完成參考,則 RxFinalizeNetFCB 會失敗) 。

如果 ForceFinalize 參數為 TRUE,RxFinalizeNetFCB 會導致系統在核取的組建上判斷提示。

遞歸完成之後,與FCB相關聯的參考計數最多可以是1,以便進一步完成。 這個最終的參考計數屬於NET_ROOT的前置詞名稱數據表。 實際的最終完成分成兩個部分:

  • 如果參考計數等於 1 或 ForceFinalize 參數為 TRUE則 RxFinalizeNetFCB 會完成 FCB
  • 如果參考計數變成零,FCB 就會完成,而且也會釋出用於FCB的記憶體。

規格需求

需求
目標平台 桌面
標頭 rxprocs.h (包含 Rxprocs.h)
IRQL <= APC_LEVEL

另請參閱

RxCreateNetFcb

RxCreateNetFobx

RxCreateNetRoot

RxCreateSrvCall

RxCreateSrvOpen

RxCreateVNetRoot

RxDereference

RxFinalizeConnection

RxFinalizeNetFobx

RxFinalizeNetRoot

RxFinalizeSrvCall

RxFinalizeSrvOpen

RxFinalizeVNetRoot

RxFinishFcbInitialization

RxForceFinalizeAllVNetRoots

RxReference

RxSetSrvCallDomainName

RxpDereferenceNetFcb

RxpReferenceNetFcb

FCB 結構