Prefix Table Management
RDBSS defines data structures that enable use of prefix tables to catalog SRV_CALL, NET_ROOT, and V_NET_ROOT names.
The current implementation of name management in RDBSS uses a table that has the following components:
A queue of inserted names
A version stamp
A table lock resource that controls table access
A value that indicates whether name matches are case insensitive
A bucket of hash value entries for this prefix table
The table lock resource is used in the normal way: shared for lookup operations, exclusive for change operations.
The version stamp changes with each change. The reason for the queue is that the prefix table package allows multiple callers to be enumerating at a time. The queue of inserted names and version stamp allow multiple callers to be enumerating simultaneously. The queue could be used as a faster lookup for file names, but the prefix table is definitely the correct approach for NET_ROOT structures.
These prefix table management routines are used internally by RDBSS in response to a call from MUP to claim a name or to form the create path for a NET_ROOT structure. These RDBSS prefix table management routines can also be used by network mini-redirectors, as long as the appropriate lock is acquired before accessing the table and the lock is released when work is completed. The normal use by a driver would be as follows:
Acquire a shared lock by calling RxAcquirePrefixTableLockShared.
Look up a name by calling RxPrefixTableLookupName.
Release the shared lock by calling RxReleasePrefixTableLock.
Note that certain routines are implemented only on Windows XP and previous versions of Windows. RxPrefixTableLookupName is the only prefix table management routine implemented on all versions of Windows
The RDBSS prefix table management routines include the following:
Routine | Description |
---|---|
This routine acquires an exclusive lock on a prefix table used to catalog SRV_CALL and NET_ROOT names. This routine is only available on Windows XP and Windows 2000. This routine is used internally by RDBSS and should not be used by network mini-redirectors. |
|
This routine acquires a shared lock on a prefix table used to catalog SRV_CALL and NET_ROOT names. This routine is only available on Windows XP and Windows 2000. This routine is used internally by RDBSS and should not be used by network mini-redirectors. |
|
The routine looks up a name in a prefix table used to catalog SRV_CALL and NET_ROOT names and converts from the underlying pointer to the containing structure. |
|
This routine releases a lock on a prefix table used to catalog SRV_CALL and NET_ROOT names. This routine is only available on Windows XP and Windows 2000. This routine is used internally by RDBSS and should not be used by network mini-redirectors. |
Starting with Windows Server 2003, the routines mentioned in the previous table, except RxPrefixTableLookupName, are replaced by macros.The following macros are defined that call the prefix table routines with fewer parameters.
Macro | Description |
---|---|
RxAcquirePrefixTableLockExclusive (TABLE, WAIT) |
This macro acquires the prefix table lock in exclusive mode for change operations. |
RxAcquirePrefixTableLockShared (TABLE, WAIT) |
This macro acquires the prefix table lock in shared mode for lookup operations. |
RxIsPrefixTableLockAcquired (TABLE) |
This macro indicates if the prefix table lock was acquired in either exclusive or shared mode. |
RxIsPrefixTableLockExclusive (TABLE) |
This macro indicates if the prefix table lock was acquired in exclusive mode. |
RxReleasePrefixTableLock (TABLE) |
This macro frees the prefix table lock. |