FCB 结构

文件对象中的 FsContext 字段指向 FCB) 结构 (文件控制块。 共享 FCB 的所有操作都引用同一文件。 遗憾的是,SMB 服务器现在的实现方式是一个名称可以是别名,因此两个不同的名称可以是同一个文件。 FCB 是文件操作的焦点。 由于对同一 FCB 的操作实际上在同一个文件上,因此同步基于 FCB 而不是某个更高级别的对象。

每当创建 FCB 结构时,也会创建相应的SRV_OPEN和 FOBX 结构。 多个SRV_OPEN结构可以与给定的 FCB 结构相关联,多个 FOBX 结构与给定SRV_OPEN结构相关联。 在大多数情况下,一个SRV_OPEN结构与 FCB 相关联,与给定SRV_OPEN结构关联的 FOBX 结构数为 1。 为了改进此类情况下的空间局部性和分页行为,FCB 结构的分配还涉及一个关联的SRV_OPEN和 FOBX 结构的分配。

RDBSS 尝试在内存中一起分配关联的 FCB、SRV_OPEN 和 FOBX 结构,以改善分页行为。 RDBSS 不会一起分配 FCB 和 NET_ROOT 结构,因为NET_ROOT结构不会分页,但 FCB 结构通常 (分页,除非它们) 分页文件。

FCB 结构对应于每个打开的文件和目录。 FCB 结构分为以下两部分:

  • 在非分页池中分配的非分页部分

  • 分页部件

前者是NON_PAGED_FCB后称为 FCB。

FCB 包含指向相应NON_PAGED_FCB部件的指针。 从NON_PAGED_FCB到 FCB 维护一个回点程序,以便在已检查的版本中进行调试。

NON_PAGED_FCB包含内存管理器和缓存管理器用来操作节对象的特殊指针结构。 请注意,这些指针的值通常在文件系统外部设置。

FCB 结构包含以下内容:

  • FSRTL_COMMON_HEADER 结构

  • 签名和引用计数

  • 名称和关联的表信息

  • 关联NET_ROOT结构的回点

  • 关联的SRV_OPEN结构的列表

  • 设备对象

  • 网络微型重定向程序或 FCB 结构的创建者请求的任何其他存储