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 会在内部调用此例程。 此 IRP 通常由 RDBSS 接收,以响应请求文件关闭操作的用户模式应用程序。 另一个内核驱动程序也可以发出此类 IRP。

RDBSS 中的关闭处理策略基于一个公理,即应尽可能最小化服务器上的工作负荷。 有许多应用程序在批处理文件处理 (重复关闭和打开同一文件,例如) 。 在这些情况下,打开同一文件,读取缓冲区中的一行,关闭文件,并反复重复同一组操作。

这是通过延迟处理关闭请求在 RDBSS 中处理的。 完成请求和对关闭请求启动处理之间有大约 10 秒的延迟。 这会打开一个窗口,在此期间,后续打开操作可以折叠到现有SRV_OPEN。 可以调整时间间隔以满足这些要求。

在调用 RxFinalizeNetFCB 之前,必须在独占模式下获取 FCB 结构的锁。

如果 RecursiveFinalize 参数为 FALSE,则如果 FCB 的未完成引用 (FCB 结构的 OpenCountCleanCount 成员为非零) ,则 RxFinalizeNetFCB 将失败。

如果 ForceFinalize 参数为 TRUE则 RxFinalizeNetFCB 会导致系统对已检查的生成执行 ASSERT。

递归终结后,与 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 结构