プレフィックス テーブル管理
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 プレフィックス テーブル管理ルーチンには、次のものが含まれます。
ルーチンによって返される値 | 説明 |
---|---|
このルーチンは、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) |
このマクロは、プレフィックス テーブルロックを解放します。 |