次の方法で共有


接続とファイル構造管理

接続とファイルの構造を管理するために RDBSS によって使われる 6 つの基本的なデータ構造体があります。 これらのデータ構造体は、RDBSS とさまざまなネットワーク ミニ リダイレクターによって内部的に使われます。 これらのデータ構造体には 2 つのバージョンがあります。 ネットワーク ミニ リダイレクター バージョンには、ネットワーク ミニ リダイレクター ドライバーによって操作できるフィールドが含まれます。 これらのデータ構造体のネットワーク ミニ リダイレクター バージョンは、MRX_ プレフィックスで始まります。 RDBSS バージョンには、RDBSS によってのみ操作できる追加のフィールドが含まれます。

これら 6 つの基本的なデータ構造体は次のとおりです。

  • SRV_CALL -- サーバー呼び出しコンテキスト。 この構造体は、リモート サーバーの抽象化を提供します。

  • NET_ROOT -- ネット ルート。 この構造体は、共有への接続を抽象化します。

  • V_NET_ROOT -- ネット ルートのビュー (仮想ネットルートとも呼ばれます)。

  • FCB -- ファイル制御ブロック。 この構造体は、共有で開かれているファイルを表します。

  • SRV_OPEN -- サーバー側のオープン コンテキスト。 この構造体は、サーバーで開かれているハンドルをカプセル化します。

  • FOBX -- ファイル オブジェクト拡張機能。 この構造体は、FILE_OBJECT 構造体に対する RDBSS の拡張機能です。

これらのデータ構造体は、次の階層に編成されています。

                SRV_CALL 
     FCB   <------> NET_ROOT
        SRV_OPEN  <---> V_NET_ROOT
            FOBX
                FILE_OBJECT

カーネル ファイル システムの呼び出しへの応答で、RDBSS は通常、FOBX 構造体を除く前に説明したすべての構造体を作成し、ネットワーク ミニ リダイレクター ドライバー用に最終処理します。 そのため、ネットワーク ミニ リダイレクター ドライバーは、通常、接続とファイルの構造体の管理に使われ RDBSS ルーチンの一部のみを呼び出します。 これらのルーチンのほとんどは、RDBSS によって内部的に呼び出されます。

これらのデータ構造体はすべて参照をカウントされます。 データ構造体の参照カウントは次のとおりです。

データ構造 参照カウントの説明

SRV_CALL

SRV_CALL を指している NET_ROOT エントリの数に加えて、動的な値。

NET_ROOT

NET_ROOT を指している FCB エントリと V_NET_ROOT エントリの数に加えて、動的な値。

V_NET_ROOT

V_NET_ROOT を指している SRV_OPEN エントリの数に加えて、動的な値。

FCB

FCB を指している SRV_OPEN エントリの数に加えて、動的な値。

SRV_OPEN

SRV_OPEN を指している FOBX エントリの数に加えて、動的な値。

FOBX

動的な値。

いずれの場合も、動的な値とは、逆参照せずに構造体を参照している呼び出し元の数のことです。 参照カウントの静的な部分は、ルーチン自体によって維持されます。 たとえば、RxCreateNetRoot は、関連付けられている SRV_CALL 構造体に対する参照カウントをインクリメントします。

参照呼び出しと成功した検索では、参照カウントがインクリメントされます。逆参照呼び出しではカウントがデクリメントされます。 作成ルーチンが呼び出されると、構造体が割り当てられて、参照カウントが 1 に設定されます。

データ構造体に関連付けられている参照カウントは、少なくとも、1 に、それに関連付けられている次の下位レベルのデータ構造体のインスタンス数を加えたものです。 たとえば、2 つの NET_ROOT が関連付けられている SRV_CALL に関連付けられている参照カウントは、少なくとも 3 です。 RDBSS 内部の NameTable 構造体と、次の下位レベルのデータ構造体によって保持される参照に加えて、取得された可能性のある追加の参照があります。

これらの制限により、次の下位レベルのすべてのデータ構造体が最終処理されるか、その参照を解放すまで、特定のレベルのデータ構造体を最終処理 (その解放、および関連するメモリ ブロックの解放) できないことが保証されます。 たとえば、FCB への参照が保持されている場合、それに関連付けられている V_NET_ROOT、NET_ROOT、SRV_CALL 構造体に安全にアクセスできます。

ネットワーク ミニ リダイレクターと RDBSS の間のインターフェイスで使われる 2 つの重要な抽象化は、SRV_CALL 構造体と NET_ROOT 構造体です。 SRV_CALL 構造体は接続が確立されたサーバーに関連付けられているコンテキストに対応し、NET_ROOT 構造体はサーバー上の共有に対応します (これは、ネットワーク ミニ リダイレクターによって要求された名前空間の一部と見ることもできます)。

通常、SRV_CALL および NET_ROOT 構造体の作成には、少なくとも 1 回のネットワーク ラウンドトリップが必要です。 非同期操作を続けられるようにするため、これらの操作は 2 フェーズのアクティビティとしてモデル化されています。 SRV_CALL と NET_ROOT 構造体を作成するためのネットワーク ミニ リダイレクターへの下方への各呼び出しには、要求の完了状態を通知するための、ネットワーク ミニ リダイレクターから RDBSS への上方への呼び出しが伴います。 現在、これらは同期的です。

SRV_CALL 構造体の作成は、RDBSS は多数のネットワーク ミニ リダイレクターから選択してサーバーとの接続を確立する必要があるという事実によって、さらに複雑になります。 RDBSS が展開するネットワーク ミニ リダイレクターを選択するときの柔軟性を最大限にするため、SRV_CALL 構造体の作成には、RDBSS がネットワーク ミニ リダイレクターに選ばれたことを通知する 3 番目のフェーズが含まれます。 選ばれなかったすべてのネットワーク ミニ リダイレクターは、関連するコンテキストを破棄します。

このセクションでは、以下のトピックについて説明します:

SRV_CALL 構造体

NET_ROOT 構造体

V_NET_ROOT 構造体

FCB 構造体

SRV_OPEN 構造体

FOBX 構造体

接続とファイル構造のロック

接続とファイル制御ブロック管理ルーチン