Поделиться через


Структура FCB

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

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

RDBSS пытается выделить связанные структуры FCB, SRV_OPEN и FOBX вместе в памяти для улучшения поведения подкачки. 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