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 结构的创建者请求的任何其他存储