重定向的驱动器缓冲子系统

重定向的驱动器缓冲子系统 (RDBSS) 作为内核模式文件系统驱动程序 rdbss.sys(操作系统附带)和静态库 rdbsslib.lib 提供,该驱动程序包含在 Windows 驱动程序工具包 (WDK) 。 静态库复制 rdbss.sys 内核模式驱动程序中的代码。

原始方案是,所有网络微型重定向程序都将与 rdbss.sys 内核驱动程序动态链接。 动态链接到 rdbss.sys 的驱动程序称为非整体驱动程序。 但是,此功能从未完全实现,因此只有 Microsoft SMB 网络微型重定向程序动态链接到 rdbss.sys 并且是非整体驱动程序。 所有其他网络微型重定向程序(包括操作系统附带的其他 Microsoft 重定向程序),链接到 rdbsslib.lib 库,并静态包含 与rdbss.sys 内核驱动程序相同的代码。 虽然 rdbss.sys 驱动程序和 rdbsslib.lib 库使用相同的 RDBSS 源代码,但整体式网络微型重定向器驱动程序的大小更大,因为 rdbss.sys 中的大多数代码都包含在每个驱动程序中。 例如,在 Windows Server 2003 上,各种驱动程序的文件大小如下所示:

驱动程序 文件大小 说明

rdbss.sys

156 KB

仅由 Microsoft SMB 微型重定向程序使用的 RDBSS 设备驱动程序。

mrxdav.sys

179 KB

Microsoft WebDAV 网络微型重定向程序驱动程序,它链接在 大部分 rdbsslib.lib 中。

rdrpdr.sys

185 KB

Microsoft 终端服务网络微型重定向程序驱动程序,它链接在 大部分 rdbsslib.lib 中。

RDBSS 与 I/O 管理器、缓存管理器、内存管理器、网络微型重定向程序和其他内核系统通信。 RDBSS 支持以下功能:

  • 为 RDBSS 和微型重定向程序驱动程序之间的通信定义了定义完善的机制。

  • 支持多种缓冲模式。 还有一些支持例程,可帮助网络微型重定向程序动态更改缓冲模式以启用实时共享。

  • 网络微型重定向程序可以指示对各种选项的支持,包括区分大小写的名称、UNC 命名、打印、管道、邮件图以及清理 (重用某些数据结构) 。

  • 网络微型重定向器支持命名空间、文件信息和连接缓存,以减少不必要的网络操作。

RDBSS 使用定义完善的通信机制。 RDBSS 导出大量可由微型重定向程序驱动程序和其他内核系统调用的函数来设置选项和执行各种操作。

微型重定向程序实现许多回调函数,RDBSS 使用这些函数与微型重定向程序驱动程序通信。 当微型重定向程序驱动程序首次在其 DriverEntry 例程) 中启动 (时,驱动程序调用 RDBSS 函数来注册微型重定向程序驱动程序,并传入一个结构,其中包含指向这些回调函数的指针, (调度表) 以及一些配置数据值。

必须在微型重定向程序驱动程序中实现的回调函数属于以下基本类别:

  • 用于管理网络微型重定向程序数据结构的回调。

  • 文件 I/O 操作的回调。

    • 同步文件 I/O 例程 (创建、关闭和清理,例如) 。
    • 异步文件 I/O 例程 (读取、写入。FSTCL、IOCTL 和 lock,例如) 。 出于历史原因,网络微型重定向器中的这些同步文件 I/O 例程通常称为低 I/O 操作。

文件 I/O 回调应是同步的,但属于低 I/O 类别的函数除外。 低 I/O 例程可以异步运行,因此必须支持取消。

RDBSS 和微型重定向程序通常使用基本数据结构(RX_CONTEXT)来传递信息。 RX_CONTEXT封装大量信息,并包含指向当前 IRP 的指针。 此RX_CONTEXT数据结构的默认大小。 可以根据远程文件系统和网络微型重定向程序的要求扩展此RX_CONTEXT结构的大小。 当小型重定向程序首次向 RDBSS 注册 () 指定的数据值之一时,定义用于此扩展RX_CONTEXT的大小。

RDBSS 和微型重定向器还广泛使用以下数据结构抽象:

  • 服务器调用上下文 (SRV_CALL) -- 与每个已知文件系统服务器关联的上下文。

  • Net Root (NET_ROOT) - 用户打开的共享的根目录。

  • Virtual Net Roots (V_NET_ROOT) - 服务器上的共享视图。 视图可以沿多个维度进行约束。 例如,该视图可以与登录 ID 相关联,这会限制可以对共享执行的操作。

  • 文件控制阻止 (FCB) - 与客户端上打开的每个唯一文件关联的 RDBSS 数据结构。

  • FILE Object Extensions (FOBX) - NT FILE_OBJECT的 RDBSS 扩展。

  • ServerSide Open Context (SRV_OPEN) -- 远程共享上文件的打开句柄。

RDBSS 对缓冲支持非常灵活。 可以将 RDBSS 设置为分别缓冲读取和写入请求。 还可以缓存文件大小和文件时间。 允许显式缓冲策略,可以在打开文件服务器上的共享时设置这些策略。 也可以基于单个文件设置缓冲。

RDBSS 将尝试使用访问历史记录来减少对不必要的网络请求的需求。 例如,如果远程文件的打开请求失败,RDBSS 将缓存此信息。 如果客户端立即请求打开类似的文件,并在文件名中更改大小写,RDBSS 将对忽略文件名中大小写的远程文件系统的请求失败。