前缀表管理

RDBSS 定义允许使用前缀表对SRV_CALL、NET_ROOT和V_NET_ROOT名称进行编目的数据结构。

RDBSS 中名称管理的当前实现使用具有以下组件的表:

  • 插入名称的队列

  • 版本标记

  • 控制表访问的表锁资源

  • 一个值,该值指示名称匹配项是否不区分大小写

  • 此前缀表的哈希值条目的存储桶

表锁资源按正常方式使用:共享用于查找操作,独占更改操作。

每次更改时,版本标记都会更改。 队列的原因是前缀表包允许一次枚举多个调用方。 插入的名称和版本标记的队列允许同时枚举多个调用方。 可以使用队列来更快地查找文件名,但前缀表绝对是NET_ROOT结构的正确方法。

RDBSS 在内部使用这些前缀表管理例程来响应来自 MUP 的调用来声明名称或形成NET_ROOT结构的创建路径。 网络微型重定向程序也可以使用这些 RDBSS 前缀表管理例程,前提是在访问表之前获取了相应的锁,并在工作完成后释放锁。 驱动程序的正常使用如下所示:

  • 通过调用 RxAcquirePrefixTableLockShared 获取共享锁。

  • 通过调用 RxPrefixTableLookupName 查找名称。

  • 通过调用 RxReleasePrefixTableLock 释放共享锁。

请注意,某些例程仅在 Windows XP 和早期版本的 Windows 上实现。 RxPrefixTableLookupName 是所有 Windows 版本上实现的唯一前缀表管理例程

RDBSS 前缀表管理例程包括以下内容:

例程所返回的值 说明

RxpAcquirePrefixTableLockExclusive

此例程获取用于编录SRV_CALL和NET_ROOT名称的前缀表的独占锁。

此例程仅在 Windows XP 和 Windows 2000 上可用。 此例程由 RDBSS 在内部使用,不应由网络微型重定向程序使用。

RxpAcquirePrefixTableLockShared

此例程获取用于编录SRV_CALL和NET_ROOT名称的前缀表上的共享锁。

此例程仅在 Windows XP 和 Windows 2000 上可用。 此例程由 RDBSS 在内部使用,不应由网络微型重定向程序使用。

RxPrefixTableLookupName

例程在前缀表中查找用于编录SRV_CALL的名称,并NET_ROOT名称,并从基础指针转换为包含结构。

RxpReleasePrefixTableLock

此例程释放用于编录SRV_CALL和NET_ROOT名称的前缀表的锁。

此例程仅在 Windows XP 和 Windows 2000 上可用。 此例程由 RDBSS 在内部使用,不应由网络微型重定向程序使用。

从 Windows Server 2003 开始,上表中提到的例程( RxPrefixTableLookupName 除外)将替换为宏。定义了以下宏,这些宏使用较少的参数调用前缀表例程。

说明

RxAcquirePrefixTableLockExclusive (TABLEWAIT)

此宏在独占模式下获取用于更改操作的前缀表锁。

RxAcquirePrefixTableLockShared (TABLEWAIT)

此宏在共享模式下获取用于查找操作的前缀表锁。

RxIsPrefixTableLockAcquired (TABLE)

此宏指示前缀表锁是在独占模式还是共享模式下获取的。

RxIsPrefixTableLockExclusive (TABLE)

此宏指示前缀表锁是否是在独占模式下获取的。

RxReleasePrefixTableLock (TABLE)

此宏释放前缀表锁。