Freigeben über


Die FCB-Struktur

Auf die FcB-Struktur (File Control Block) verweist das Feld FsContext im Dateiobjekt. Alle Vorgänge, die einen FCB gemeinsam nutzen, beziehen sich auf dieselbe Datei. Leider sind SMB-Server heute so implementiert, dass ein Name ein Alias sein kann, sodass zwei verschiedene Namen die gleiche Datei sein können. Der FCB ist der Schwerpunkt der Dateivorgänge. Da Vorgänge für denselben FCB tatsächlich auf derselben Datei basieren, basiert die Synchronisierung auf dem FCB und nicht auf einem Objekt auf höherer Ebene.

Immer wenn eine FCB-Struktur erstellt wird, wird auch eine entsprechende SRV_OPEN- und FOBX-Struktur erstellt. Einer bestimmten FCB-Struktur können mehr als eine SRV_OPEN-Struktur zugeordnet werden, und einer bestimmten SRV_OPEN-Struktur ist mehr als eine FOBX-Struktur zugeordnet. In den meisten Fällen ist die SRV_OPEN Struktur einem FCB zugeordnet, und die Anzahl der FOBX-Strukturen, die einer bestimmten SRV_OPEN-Struktur zugeordnet sind, ist 1. Um die räumliche Lokalität und das Pagingverhalten in solchen Fällen zu verbessern, umfasst die Zuordnung für eine FCB-Struktur auch eine Zuordnung für eine zugeordnete SRV_OPEN- und FOBX-Struktur.

RDBSS versucht, die zugeordneten FCB-, SRV_OPEN- und FOBX-Strukturen im Arbeitsspeicher zuzuordnen, um das Pagingverhalten zu verbessern. RDBSS ordnet die FCB- und NET_ROOT-Strukturen nicht zusammen, da die NET_ROOT Strukturen nicht ausgelagert werden, aber FCB-Strukturen in der Regel ausgelagert werden (es sei denn, es handelt sich um Auslagerungsdateien).

Die FCB-Struktur entspricht jeder geöffneten Datei und jedem geöffneten Verzeichnis. Die FCB-Struktur ist in die folgenden beiden Teile unterteilt:

  • Ein nicht ausgelagerter Teil, der in einem Nicht-Auslagerungspool zugeordnet ist

  • Ein ausgelagertes Teil

Ersteres ist die NON_PAGED_FCB und die spätere wird als FCB bezeichnet.

Der FCB enthält einen Zeiger auf den entsprechenden NON_PAGED_FCB Teil. Ein Backpointer wird vom NON_PAGED_FCB zum FCB zu Debugzwecken in überprüften Builds verwaltet.

Die NON_PAGED_FCB enthält eine Struktur von speziellen Zeigern, die vom Speicher-Manager und Cache-Manager zum Bearbeiten von Abschnittsobjekten verwendet werden. Beachten Sie, dass die Werte für diese Zeiger normalerweise außerhalb des Dateisystems festgelegt werden.

Eine FCB-Struktur enthält Folgendes:

  • Eine FSRTL_COMMON_HEADER-Struktur

  • Eine Signatur und eine Verweisanzahl

  • Ein Name und zugehörige Tabelleninformationen

  • Ein Backpointer auf die zugeordnete NET_ROOT-Struktur

  • Eine Liste der zugeordneten SRV_OPEN-Strukturen

  • Das Geräteobjekt

  • Alle zusätzlichen Speicher, die vom Netzwerk-Mini-Redirector oder dem Ersteller der FCB-Struktur angefordert werden