Управление структурами соединений и файлов

Существует шесть основных структур данных, используемых RDBSS для управления подключениями и файловыми структурами. Эти структуры данных внутренне используются RDBSS и различными сетевыми мини-редиректерами. Существует две версии этих структур данных. Версия мини-перенаправления сети содержит поля, которые можно управлять драйвером мини-перенаправления сети. Версия мини-перенаправления сети этих структур данных начинается с префикса MRX_. Версия RDBSSS содержит дополнительные поля, которые могут управляться только RDBSS.

Эти шесть основных структур данных приведены следующим образом:

  • контекст вызова на сервере SRV_CALL. Эта структура предоставляет абстракцию для удаленного сервера.

  • NET_ROOT--корень сети. Эта структура абстрагирует подключение к общей папке.

  • V_NET_ROOT—представление корней сети (также именуются как виртуальные netroots).

  • Блок управления файлами (FCB). Эта структура представляет открытый файл на общем ресурсе.

  • SRV_OPEN-серверный открытый контекст. Эта структура инкапсулирует открытый дескриптор на сервере.

  • Расширение объекта FOBX--file. Эта структура представляет собой расширение RDBSS для структуры FILE_OBJECT .

Эти структуры данных организованы в следующей иерархии:

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

В ответ на вызовы файловой системы ядра RDBSS обычно создает и завершает настройку сетевого драйвера мини-перенаправителя для всех упомянутых ранее структур, кроме структуры FOBX. Таким образом, драйвер мини-перенаправления сети обычно вызывает только несколько подпрограмм RDBSS, используемых для управления подключением и структурой файлов. Большинство из этих программ вызываются внутренне RDBSS.

Все эти структуры данных считаются ссылочными. Количество ссылок в структуре данных выглядит следующим образом:

Структура данных Описание счетчика ссылок

SRV_CALL

Количество записей NET_ROOT, указывающих на SRV_CALL, а также некоторое динамическое значение.

NET_ROOT

Количество записей FCB и V_NET_ROOT, указывающих на NET_ROOT, а также некоторые динамические значения.

V_NET_ROOT

Количество SRV_OPEN записей, указывающих на V_NET_ROOT, а также некоторые динамические значения.

FCB

Количество SRV_OPEN записей, указывающих на FCB, а также некоторые динамические значения.

SRV_OPEN

Количество записей FOBX, указывающих на SRV_OPEN, а также некоторое динамическое значение.

FOBX

Некоторые динамические значения.

В каждом случае динамическое значение относится к количеству вызовов, которые ссылались на структуру без разыменования. Статическая часть счетчика ссылок поддерживается самими подпрограммами. Например, RxCreateNetRoot увеличивает число ссылок для связанной структуры SRV_CALL.

Вызовы ссылок и успешные подстановки увеличивают количество ссылок; вызовы разыменования уменьшают это количество. Создайте стандартные вызовы, выделите структуру и задайте для счетчика ссылок значение 1.

Число ссылок, связанное с любой структурой данных, составляет не менее 1, а также число экземпляров структуры данных на следующем нижнем уровне, связанном с ним. Например, счетчик ссылок, связанный с SRV_CALL, к которому подключены два NET_ROOT, составляет не менее 3. Помимо ссылок, содержащихся внутренними структурами таблицы имен RDBSS и структурой данных на следующем нижнем уровне, есть дополнительные ссылки, которые могли быть получены.

Эти ограничения гарантируют, что структура данных на любом уровне не может быть завершена (освобождена и связанный блок памяти освобождён) до тех пор, пока все структуры данных на следующем уровне ниже не будут завершены или не освободят свои ссылки. Например, если поддерживается ссылка на FCB, то можно безопасно получить доступ к структурам V_NET_ROOT, NET_ROOT и SRV_CALL, связанным с ним.

Две важные абстракции, используемые в интерфейсе взаимодействия между мини-перенаправителями сети и RDBSS, называются структурами SRV_CALL и NET_ROOT. Структура SRV_CALL соответствует контексту, связанному с сервером, с которым было установлено подключение, а структура NET_ROOT соответствует ресурсу общего доступа на сервере (это также может рассматриваться как часть пространства имен, которая была заявлена мини-перенаправителем сети).

Создание структур SRV_CALL и NET_ROOT обычно включает по крайней мере одну сетевую круговую поездку. Чтобы обеспечить продолжение асинхронных операций, эти операции моделироваются как двухфазное действие. Каждый нисходящий вызов в мини-перенаправитель сети для создания структуры SRV_CALL и NET_ROOT сопровождается восходящим вызовом из мини-перенаправителя сети в RDBSS, чтобы сообщить о состоянии завершения запроса. В настоящее время они синхронны.

Создание структуры SRV_CALL еще более усложняется тем, что RDBSS должен выбрать один из нескольких мини-перенаправлений сети, чтобы установить соединение с сервером. Чтобы обеспечить RDBSS максимальную гибкость при выборе сетевого мини-перенаправления, которое он хочет развернуть, процесс создания структуры SRV_CALL включает третий этап, на котором RDBSS уведомляет сетевое мини-перенаправление о победителе. Все непродуктивные сетевые мини-редиректоры удаляют связанный контекст.

В этом разделе содержатся следующие разделы:

структура SRV_CALL

структура NET_ROOT

структура V_NET_ROOT

структура FCB

структура SRV_OPEN

структура FOBX

Блокировка подключений и структуры файлов

Рутины управления блоками управления подключениями и файлами