前缀表管理
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 前缀表管理例程包括以下内容:
例程所返回的值 | 说明 |
---|---|
此例程获取用于编录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 除外)将替换为宏。定义了以下宏,这些宏使用较少的参数调用前缀表例程。
宏 | 说明 |
---|---|
RxAcquirePrefixTableLockExclusive (TABLE, WAIT) |
此宏在独占模式下获取用于更改操作的前缀表锁。 |
RxAcquirePrefixTableLockShared (TABLE, WAIT) |
此宏在共享模式下获取用于查找操作的前缀表锁。 |
RxIsPrefixTableLockAcquired (TABLE) |
此宏指示前缀表锁是在独占模式还是共享模式下获取的。 |
RxIsPrefixTableLockExclusive (TABLE) |
此宏指示前缀表锁是否是在独占模式下获取的。 |
RxReleasePrefixTableLock (TABLE) |
此宏释放前缀表锁。 |