缓冲状态控件

RDBSS 提供缓冲管理器,这是一种机制,用于将分布式缓存一致性与各种网络微型重定向程序结合使用。 此服务封装在 RDBSS 中的缓冲管理器中,该管理器处理更改缓冲状态的请求。 RDBSS 中的缓冲管理器跟踪和启动由各种网络微型重定向程序以及 RDBSS 生成的所有更改缓冲状态请求的操作。

在典型的网络微型重定向器中实现缓存一致性有几个常见组件:

  • 修改以创建和打开文件例程。

    在此路径中,确定缓冲请求的类型,并向服务器发出相应的请求。 从网络微型重定向程序(可能是服务器)返回时,根据创建或打开调用的结果更新与 FCB 关联的缓冲状态。

  • 修改以接收指示代码以处理来自服务器的更改缓冲状态通知。

    如果检测到此类请求,则必须触发用于协调缓冲状态的本地机制。

  • 一种用于更改作为 RDBSS 的一部分实现的缓冲状态的机制。 任何更改缓冲状态请求都必须标识应用请求的SRV_OPEN结构。

识别SRV_OPEN结构所涉及的计算工作量取决于协议和网络微型重定向程序的详细信息。 在 SMB 协议中,机会锁 (oplock) 为缓存一致性提供必要的基础结构。 在 Windows 的 SMB 协议实现中,使用 RDBSS 提供的多路复用 ID API。 服务器将选取用于标识在服务器上打开的文件的多路复用 ID。 多路复用 ID 相对于打开它们的NET_ROOT (共享) 。 因此,每个更改缓冲状态请求都由两个键标识:NetRootKey 和 SrvOpenKey,它们需要分别转换为相应的NET_ROOT和SRV_OPEN结构。 为了更好地与资源获取/发布机制集成,并避免在各种网络微型重定向器中重复此工作,RDBSS 提供了此服务。

RDBSS 中提供了两个例程,用于指示SRV_OPEN结构的缓冲状态更改:

请注意,键关联不可逆,并且将持续关联的SRV_OPEN结构的生存期。

需要辅助机制来建立从多路复用 ID 到SRV_OPEN结构的映射的网络微型重定向程序可以使用 RxIndicateChangeOfBufferingState,而不需要此帮助的网络微型重定向程序可以使用 RxIndicateChangeOfBufferingStateForSrvOpen

RDBSS 中的缓冲管理器在不同的阶段处理这些请求。 它将从多个列表之一中的各个基础网络微型重定向程序接收的请求进行维护。

  • Dispatcher 列表包含尚未建立到SRV_OPEN结构的适当映射的所有请求。

  • 处理程序列表包含已为其建立适当映射但尚未处理的所有请求。

  • LastChanceHandlerList 包含初始处理失败的所有请求。 当在收到更改缓冲状态请求时,在共享模式下获取 FCB 时,通常会发生这种情况。 在这种情况下,oplock 中断请求只能由延迟的工作线程处理。

网络微型重定向程序驱动程序中的更改缓冲状态请求处理与 FCB 获取和发布协议交织在一起。 这有助于确保缩短周转时间。

RDBSS 提供以下例程来管理网络微型重定向程序驱动程序可以使用的缓冲状态:

例程所返回的值 说明

RxChangeBufferingState

调用此例程来处理缓冲状态更改请求。

RxIndicateChangeOfBufferingState

调用此例程以注册缓冲状态更改请求 (oplock 中断指示,例如) 供以后处理。

RxIndicateChangeOfBufferingStateForSrvOpen

调用此例程以注册缓冲状态更改请求 (oplock 中断指示,例如) 供以后处理。