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 前缀表管理例程包括:
| Routine | DESCRIPTION |
|---|---|
此例程获取用于目录SRV_CALL和NET_ROOT名称的前缀表的排他锁。 此例程仅在 Windows XP 和 Windows 2000 上可用。 此例程由 RDBSS 在内部使用,不应由网络微型重定向程序使用。 |
|
此例程获取用于目录SRV_CALL和NET_ROOT名称的前缀表上的共享锁。 此例程仅在 Windows XP 和 Windows 2000 上可用。 此例程由 RDBSS 在内部使用,不应由网络微型重定向程序使用。 |
|
例程在前缀表中查找一个名称,该名称用于编录SRV_CALL和NET_ROOT名称,并从基础指针转换为包含结构。 |
|
此例程释放用于编录SRV_CALL和NET_ROOT名称的前缀表的锁。 此例程仅在 Windows XP 和 Windows 2000 上可用。 此例程由 RDBSS 在内部使用,不应由网络微型重定向程序使用。 |
从 Windows Server 2003 开始,上表中提到的例程( RxPrefixTableLookupName 除外)将替换为宏。定义了以下宏,以更少的参数调用前缀表例程。
| 宏 | DESCRIPTION |
|---|---|
RxAcquirePrefixTableLockExclusive (TABLE,WAIT) |
此宏以独占模式获取前缀表锁,以便执行更改作。 |
RxAcquirePrefixTableLockShared (TABLE, WAIT) |
此宏在共享模式下获取用于查找作的前缀表锁。 |
RxIsPrefixTableLockAcquired (TABLE) |
此宏指示前缀表锁是在独占模式还是共享模式下获取的。 |
RxIsPrefixTableLockExclusive (TABLE) |
此宏指示前缀表锁是否以独占模式获取。 |
RxReleasePrefixTableLock (TABLE) |
此宏释放前缀表锁。 |