FCB 構造

ファイル制御ブロック (FCB) 構造体は、ファイル オブジェクトの FsContext フィールドによって指されます。 FCB を共有するすべての操作は、同じファイルを参照します。 残念ながら、SMB (メガバイト) サーバーは現在、名前をエイリアスにして、2 つの異なる名前を同じファイルにできるように実装されています。 FCB は、ファイル操作の焦点です。 同じ FCB に対する操作は実際には同じファイル上に存在するため、同期は上位レベルのオブジェクトではなく FCB に基づいています。

FCB 構造体が作成されるたびに、対応する SRV_OPEN と FOBX 構造体も作成されます。 複数の SRV_OPEN 構造体を特定の FCB 構造体に関連付けることができ、複数の FOBX 構造体が特定の SRV_OPEN 構造体に関連付けられています。 ほとんどの場合、1 つの SRV_OPEN 構造体は FCB に関連付け、特定の SRV_OPEN 構造体に関連付けられている FOBX 構造体の数は 1 です。 このような場合の空間局所性とページング動作を改善するために、FCB 構造体の割り当てには、関連付けられた 1 つの SRV_OPEN と FOBX 構造体に対する割り当ても含まれます。

RDBSS は、関連する FCB、SRV_OPEN 、および FOBX 構造体をメモリに割り当ててページング動作を改善しようとします。 RDBSS は FCB 構造体と NET_ROOT 構造体を一緒に割り当てません。これは、NET_ROOT 構造体はページングされませんが、FCB 構造体は通常ページングされます (ファイルのページングを除く)。

FCB 構造体は、開いているすべてのファイルとディレクトリに対応します。 FCB 構造体は、次の 2 つの部分に分割されます。

  • 非ページ プールに割り当てられた非ページ パーツ

  • ページングされたパーツ

前者は NON_PAGED_FCB で、後は FCB と呼ばれます。

FCB には、対応する NON_PAGED_FCB 部分へのポインターが含まれています。 バックポイントは、チェックビルドでデバッグ目的で NON_PAGED_FCB から FCB にメインされます。

NON_PAGED_FCB には、セクション オブジェクトを操作するために Memory Manager と Cache Manager によって使用される特殊なポインターの構造が含まれています。 これらのポインターの値は通常、ファイル システムの外部で設定されることに注意してください。

FCB 構造体には、次のものが含まれます。

  • FSRTL_COMMON_HEADER 構造体

  • 署名と参照カウント

  • 名前と関連付けられたテーブル情報

  • 関連付けられている NET_ROOT 構造体へのバックポイント

  • 関連付けられている SRV_OPEN 構造体の一覧

  • デバイス オブジェクト

  • ネットワーク ミニ リダイレクターまたは FCB 構造体の作成者によって要求された追加のストレージ