Präfixtabellenverwaltung
RDBSS definiert Datenstrukturen, die die Verwendung von Präfixtabellen zum Katalogisieren von SRV_CALL-, NET_ROOT- und V_NET_ROOT-Namen ermöglichen.
Die aktuelle Implementierung der Namensverwaltung in RDBSS verwendet eine Tabelle mit den folgenden Komponenten:
Eine Warteschlange mit eingefügten Namen
Versionsstempel
Eine Tabellensperresressource, die den Tabellenzugriff steuert
Ein Wert, der angibt, ob bei Namen übereinstimmungen die Groß-/Kleinschreibung nicht beachtet wird.
Ein Bucket mit Hashwerteinträgen für diese Präfixtabelle
Die Tabellensperrressource wird normal verwendet: freigegeben für Nachschlagevorgänge, ausschließlich für Änderungsvorgänge.
Der Versionsstempel ändert sich mit jeder Änderung. Der Grund für die Warteschlange besteht darin, dass mit dem Präfixtabellenpaket mehrere Aufrufer gleichzeitig aufgezählt werden können. Die Warteschlange der eingefügten Namen und des Versionsstempels ermöglichen es, dass mehrere Aufrufer gleichzeitig aufgelistet werden können. Die Warteschlange könnte als schnellere Suche nach Dateinamen verwendet werden, aber die Präfixtabelle ist definitiv der richtige Ansatz für NET_ROOT Strukturen.
Diese Präfixtabellenverwaltungsroutinen werden intern von RDBSS als Reaktion auf einen Aufruf von MUP verwendet, um einen Namen anzufordern oder den Erstellungspfad für eine NET_ROOT-Struktur zu bilden. Diese RDBSS-Präfixtabellenverwaltungsroutinen können auch von Netzwerkminiumleitungen verwendet werden, solange die entsprechende Sperre vor dem Zugriff auf die Tabelle abgerufen und die Sperre nach Abschluss der Arbeit freigegeben wird. Die normale Verwendung durch einen Treiber wäre wie folgt:
Rufen Sie eine freigegebene Sperre auf, indem Sie RxAcquirePrefixTableLockShared aufrufen.
Suchen Sie einen Namen, indem Sie RxPrefixTableLookupName aufrufen.
Lösen Sie die freigegebene Sperre, indem Sie RxReleasePrefixTableLock aufrufen.
Beachten Sie, dass bestimmte Routinen nur unter Windows XP und früheren Versionen von Windows implementiert werden. RxPrefixTableLookupName ist die einzige Präfixtabellenverwaltungsroutine, die in allen Versionen von Windows implementiert ist.
Die RDBSS-Präfixtabellenverwaltungsroutinen umfassen Folgendes:
-Routine zurückgegebener Wert | BESCHREIBUNG |
---|---|
Diese Routine ruft eine exklusive Sperre für eine Präfixtabelle ab, die zum Katalogieren SRV_CALL und NET_ROOT Namen verwendet wird. Diese Routine ist nur unter Windows XP und Windows 2000 verfügbar. Diese Routine wird intern von RDBSS verwendet und sollte nicht von Netzwerkminiumleitungen verwendet werden. |
|
Diese Routine ruft eine freigegebene Sperre für eine Präfixtabelle ab, die zum Katalogieren SRV_CALL und NET_ROOT Namen verwendet wird. Diese Routine ist nur unter Windows XP und Windows 2000 verfügbar. Diese Routine wird intern von RDBSS verwendet und sollte nicht von Netzwerkminiumleitungen verwendet werden. |
|
Die Routine sucht einen Namen in einer Präfixtabelle, mit der SRV_CALL und NET_ROOT Namen katalogisiert werden, und konvertiert vom zugrunde liegenden Zeiger in die enthaltende Struktur. |
|
Diese Routine gibt eine Sperre für eine Präfixtabelle frei, die zum Katalogieren von SRV_CALL und NET_ROOT Namen verwendet wird. Diese Routine ist nur unter Windows XP und Windows 2000 verfügbar. Diese Routine wird intern von RDBSS verwendet und sollte nicht von Netzwerkminiumleitungen verwendet werden. |
Ab Windows Server 2003 werden die in der vorherigen Tabelle erwähnten Routinen mit Ausnahme von RxPrefixTableLookupName durch Makros ersetzt. Die folgenden Makros sind definiert, die die Präfixtabellenroutinen mit weniger Parametern aufrufen.
Makro | Beschreibung |
---|---|
RxAcquirePrefixTableLockExclusive (TABLE, WAIT) |
Dieses Makro ruft die Präfixtabellensperre im exklusiven Modus für Änderungsvorgänge ab. |
RxAcquirePrefixTableLockShared (TABLE, WAIT) |
Dieses Makro ruft die Präfixtabellensperre im freigegebenen Modus für Nachschlagevorgänge ab. |
RxIsPrefixTableLockAcquired (TABLE) |
Dieses Makro gibt an, ob die Präfixtabellensperre entweder im exklusiven oder im freigegebenen Modus abgerufen wurde. |
RxIsPrefixTableLockExclusive (TABLE) |
Dieses Makro gibt an, ob die Präfixtabellensperre im exklusiven Modus abgerufen wurde. |
RxReleasePrefixTableLock (TABLE) |
Dieses Makro gibt die Präfixtabellensperre frei. |