RDBSS では、プレフィックス テーブルを使用してSRV_CALL、NET_ROOT、およびV_NET_ROOT名をカタログ化できるデータ構造を定義します。
RDBSS での名前管理の現在の実装では、次のコンポーネントを含むテーブルが使用されています。
挿入された名前の待ち行列
バージョン印またはスタンプ
テーブル アクセスを制御するテーブル ロック リソース
名前の一致が大文字と小文字を区別しないかどうかを示す値
このプレフィックス テーブルのハッシュ値エントリのバケット
テーブル ロック リソースは、通常の方法で使用されます。参照操作では共有され、変更操作には使用できません。
バージョン スタンプは、変更ごとに変更されます。 キューの理由は、プレフィックス テーブル パッケージを使用すると、複数の呼び出し元が一度に列挙できるようになるためです。 挿入された名前とバージョンスタンプのキューを使用すると、複数の呼び出し元が同時に列挙されることを可能にします。 キューはファイル名の高速検索として使用できますが、プレフィックス テーブルはNET_ROOT構造に対する正しいアプローチです。
これらのプレフィックス テーブル管理ルーチンは、名前を要求したり、NET_ROOT構造体の作成パスを形成したりするために、MUP からの呼び出しに応じて RDBSS によって内部的に使用されます。 これらの RDBSS プレフィックス テーブル管理ルーチンは、テーブルにアクセスする前に適切なロックが取得され、作業が完了したときにロックが解放される限り、ネットワーク ミニ リダイレクターでも使用できます。 ドライバーによる通常の使用は次のようになります。
RxAcquirePrefixTableLockShared を呼び出して共有ロックを取得します。
RxPrefixTableLookupName を呼び出して名前を検索します。
RxReleasePrefixTableLock を呼び出して共有ロックを解放します。
特定のルーチンは、Windows XP および以前のバージョンの Windows でのみ実装されることに注意してください。 RxPrefixTableLookupName は、Windows のすべてのバージョンで実装されている唯一のプレフィックス テーブル管理ルーチンです
RDBSS プレフィックス テーブル管理ルーチンには、次のものが含まれます。
| Routine | 説明 |
|---|---|
このルーチンは、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) |
このマクロは、プレフィックス テーブルロックを解放します。 |