Verbindungs- und Dateistrukturverwaltung
Es gibt sechs grundlegende Datenstrukturen, die von RDBSS zum Verwalten von Verbindungen und Dateistrukturen verwendet werden. Diese Datenstrukturen werden intern von RDBSS und den verschiedenen Netzwerk-Mini-Redirectoren verwendet. Es gibt zwei Versionen dieser Datenstrukturen. Die Version des Netzwerkminiumleitungs enthält Felder, die von einem Netzwerk-Miniumleitungstreiber bearbeitet werden können. Die Netzwerkminiumleitungsversion dieser Datenstrukturen beginnt mit dem Präfix MRX_. Die RDBSS-Version enthält zusätzliche Felder, die nur von RDBSS bearbeitet werden können.
Diese sechs grundlegenden Datenstrukturen sind wie folgt:
SRV_CALL - Serveraufrufkontext. Diese Struktur stellt die Abstraktion für einen Remoteserver bereit.
NET_ROOT --net root. Diese Struktur abstrahiert eine Verbindung mit einer Freigabe.
V_NET_ROOT-Ansicht von Netzwurzeln (auch als virtuelle Netroots bezeichnet).
FCB--Dateisteuerungsblock. Diese Struktur stellt eine geöffnete Datei auf einer Freigabe dar.
SRV_OPEN-serverseitigen offenen Kontext. Diese Struktur kapselt ein geöffnetes Handle auf dem Server.
FOBX--file-Objekterweiterung. Diese Struktur ist eine RDBSS-Erweiterung für die FILE_OBJECT-Struktur .
Diese Datenstrukturen sind in der folgenden Hierarchie organisiert:
SRV_CALL
FCB <------> NET_ROOT
SRV_OPEN <---> V_NET_ROOT
FOBX
FILE_OBJECT
Als Reaktion auf Kerneldateisystemaufrufe erstellt und finalisiert RDBSS normalerweise alle zuvor genannten Strukturen mit Ausnahme der FOBX-Struktur für einen Netzwerk-Mini-Redirector-Treiber. Daher ruft ein Netzwerk-Miniumleitungstreiber normalerweise nur einige der RDBSS-Routinen auf, die für die Verbindungs- und Dateistrukturverwaltung verwendet werden. Die meisten dieser Routinen werden intern von RDBSS aufgerufen.
Alle diese Datenstrukturen werden referenziert. Die Verweisanzahl für eine Datenstruktur lautet wie folgt:
Datenstruktur | Beschreibung der Referenzanzahl |
---|---|
SRV_CALL |
Die Anzahl der NET_ROOT Einträge, die auf SRV_CALL verweisen, plus einige dynamische Werte. |
NET_ROOT |
Die Anzahl der FCB-Einträge und V_NET_ROOT Einträge, die auf NET_ROOT verweisen, plus einige dynamische Werte. |
V_NET_ROOT |
Die Anzahl der SRV_OPEN Einträge, die auf V_NET_ROOT verweisen, plus einige dynamische Werte. |
FCB |
Die Anzahl der SRV_OPEN Einträge, die auf FCB verweisen, plus ein dynamischer Wert. |
SRV_OPEN |
Die Anzahl der FOBX-Einträge, die auf SRV_OPEN verweisen, plus einige dynamische Werte. |
FOBX |
Ein dynamischer Wert. |
In jedem Fall bezieht sich der dynamische Wert auf die Anzahl der Aufrufer, die auf die Struktur verwiesen haben, ohne sie zu deferencieren. Der statische Teil der Verweisanzahl wird von den Routinen selbst verwaltet. Beispielsweise erhöht RxCreateNetRoot die Verweisanzahl für die zugeordnete SRV_CALL-Struktur.
Verweisaufrufe und erfolgreiche Suche erhöhen die Verweisanzahl; Dereference-Aufrufe dekrementieren die Anzahl. Erstellen Von Routineaufrufen weisen Sie eine Struktur zu, und legen Sie die Verweisanzahl auf 1 fest.
Die Verweisanzahl, die einer Beliebigen Datenstruktur zugeordnet ist, beträgt mindestens 1 plus die Anzahl der Instanzen der Datenstruktur auf der nächst niedrigeren Ebene, die ihr zugeordnet ist. Beispielsweise ist die Verweisanzahl, die einem SRV_CALL zugeordnet ist, dem zwei NET_ROOTs zugeordnet sind, mindestens 3. Zusätzlich zu den Verweisen, die von den internen RDBSS-NameTable-Strukturen und der Datenstruktur auf der nächstniedreren Ebene gehalten werden, gibt es möglicherweise zusätzliche Verweise, die abgerufen wurden.
Diese Einschränkungen stellen sicher, dass eine Datenstruktur auf einer bestimmten Ebene nicht abgeschlossen (freigegeben und der zugehörige Speicherblock freigegeben) werden kann, bis alle Datenstrukturen auf der folgenden Ebene abgeschlossen oder ihre Verweise freigegeben wurden. Wenn beispielsweise ein Verweis auf einen FCB gespeichert wird, ist der Zugriff auf die V_NET_ROOT, NET_ROOT und SRV_CALL zugeordneten Strukturen sicher.
Die beiden wichtigen Abstraktionen, die in der Schnittstelle zwischen den Netzwerkminiumleitungen und RDBSS verwendet werden, sind SRV_CALL und NET_ROOT Strukturen. Eine SRV_CALL-Struktur entspricht dem Kontext, der einem Server zugeordnet ist, mit dem eine Verbindung hergestellt wurde, und die NET_ROOT-Struktur entspricht einer Freigabe auf einem Server (dies kann auch als Teil des Namespaces betrachtet werden, der von einem Netzwerk-Mini-Redirector beansprucht wurde).
Die Erstellung von SRV_CALL und NET_ROOT Strukturen umfasst in der Regel mindestens eine Netzwerkrundreise. Damit asynchrone Vorgänge fortgesetzt werden können, werden diese Vorgänge als zweiphasige Aktivität modelliert. Jeder Aufruf eines Netzwerkminiumleitungs zum Erstellen eines SRV_CALL und einer NET_ROOT-Struktur wird von einem Aufruf des Netzwerkminiumleitungsgebers an die RDBSS begleitet, um den Abschluss status der Anforderung zu benachrichtigen. Derzeit sind diese synchron.
Die Erstellung einer SRV_CALL-Struktur wird durch die Tatsache erschwert, dass das RDBSS aus einer Reihe von Netzwerkminiumleitungen auswählen muss, um eine Verbindung mit einem Server herzustellen. Um dem RDBSS maximale Flexibilität bei der Auswahl des Netzwerkminiumleitungsgebers zu bieten, den es bereitstellen möchte, umfasst die Erstellung einer SRV_CALL-Struktur eine dritte Phase, in der das RDBSS den Netzwerk-Miniumleitungsor eines Gewinners benachrichtigt. Alle verloren gehenden Netzwerkminiumleitungen zerstören den zugeordneten Kontext.
Dieser Abschnitt enthält die folgenden Themen:
Verbindungen und Dateistruktursperrung
Verwaltungsroutinen für Verbindungs- und Dateisteuerungsblocks