Структура FCB

На структуру блока управления файлами (FCB) указывает поле фсконтекст в объекте File. Все операции, совместно использующие объект FCB, ссылаются на один и тот же файл. К сожалению, в настоящее время серверы SMB реализуются так, что имя может быть псевдонимом, так что два разных имени могут быть одним и тем же файлом. FCB является фокальной точкой операций с файлами. Так как операции с одним и тем же FCB на самом деле находятся в одном файле, синхронизация основана на объекте FCB, а не на каком-либо из объектов более высокого уровня.

При создании структуры FCB также создается соответствующая структура SRV_OPEN и ФОБКС. С данной структурой FCB можно связать более одной SRV_OPEN структуры, и с данной структурой SRV_OPEN связана более одной структуры ФОБКС. В большинстве случаев одна SRV_OPENная структура связана с FCB, а число структур ФОБКС, связанных с данной структурой SRV_OPEN, равно 1. Чтобы улучшить пространственное расположение и поведение разбиения на страницы в таких случаях, выделение для структуры FCB также включает выделение для одной связанной структуры SRV_OPEN и ФОБКС.

RDBSS пытается выделить связанные структуры FCB, SRV_OPEN и ФОБКС вместе в памяти для улучшения поведения подкачки. RDBSS не выделяет структуры FCB и NET_ROOT вместе, поскольку структуры NET_ROOT не являются страничными, а структуры FCB обычно являются страничными (если они не являются файлами подкачки).

Структура FCB соответствует каждому открытому файлу и каталогу. Структура FCB разделяется на следующие две части:

  • Нестраничная часть, выделенная в невыгружаемом пуле

  • Страничная часть

Первый — NON_PAGED_FCB, а более поздний — как FCB.

FCB содержит указатель на соответствующую NON_PAGED_FCB часть. С помощью NON_PAGED_FCB в FCB поддерживается отладка в проверенных сборках.

NON_PAGED_FCB содержит структуру специальных указателей, используемых диспетчером памяти и диспетчером кэша для управления объектами раздела. Обратите внимание, что значения для этих указателей обычно задаются вне файловой системы.

Структура FCB содержит следующие сведения:

  • Структура FSRTL_COMMON_HEADER

  • Подпись и число ссылок

  • Имя и связанная с ней информация о таблице

  • Указатель мыши на связанную структуру NET_ROOT

  • Список связанных структур SRV_OPEN

  • Объект устройства

  • Дополнительное хранилище, запрошенное сетевым мини-перенаправкой или создателем структуры FCB