Редиректор клиентской машины

Основная функция редиректора клиентской машины — форматирование удаленных запросов таким образом, который будет понятен машине места назначения, и отправка их по сети. Редиректор использует структуру БМВ в качестве стандартного средства перемещения для отправки и ответа на запросы редиректора. Каждый заголовок БМВ содержит код команды (определяющий задачу, выполнение которой редиректор хочет поручить удаленной станции) и несколько полей окружения и параметров (которые определяют, как команда должна выполняться). Кроме того, в заголовке SMB последнее поле в SMB может содержать до 64Кбайт данных, посылаемых на удаленную станцию.
Read SMB (запрос) Команда read SMB (иногда называемая командой чтения диапазона байтов) приказывает серверу прочитать определенный диапазон байтов из дискового файла. Она также включает дескриптор фаи ла, число байтов для чтения и т.д. Сдвиг файла основывается на "указателе поиска", который хранится редиректором локально для файла. Серверный указатель поиска для этого дескриптора файла недействителен в данном случае, так как множество процессов удаленных рабочих станций могут обращаться к одному серверу, используя системный дескриптор файла.
Параметр "est'd total" (оценка общего числа байтов для чтения, включая прочитанные этим запросом) является необязательным. Сервер может использовать эту информацию для упреждающего чтения или для оптимизации выделения буферов.
Read SMB (ответ) Ответ на Read SMB несет с собой запрошенные данные. Мультиплексный идентификатор (MID) помечает ответ SMB для соответствующего запроса SMB.
Вот как работает этот процесс:
• Программа посылает запрос ввода-вывода операционной системе через вызов интерфейса прикладного программирования (API).
• Операционная система (или редиректор с помощью прерывания "int21") определяет, что запрос предназначен для удаленного ресурса, и передает его редиректору.
• Редиректор форматирует запрос ввода-вывода как запрос SMB и посылает его по сети на сервер.
• Сервер получает SMB и посылает запрос ввода-вывода локальной операционной системе сервера.
• Сервер форматирует данные ответа SMB. Данные возвращаются, если выполнена операция чтения, или возвращается код, если выполнена операция записи. Сервер посылает их по сети запрашивающей рабочей станции.
• Редиректор передает ответ в операционную систему.
• Операционная система передает ответ вызывающему приложению.

Исключающая oplock

Когда клиенту предоставляется исключающая oplock, он может буферизи-ровать блокированную информацию, выполнять опережающее чтение и записывать данные на клиентской стороне общения, так как знает, что к файлу не будет других средств доступа. Это происходит следующим образом. Редиректор на клиенте открывает файл, запрашивая для клиента oplock. Если файл открыт кем-то другим, клиенту отказывают в oplock, и на локальном клиенте никакой локальной буферизации выполняться не может. Это означает также, что на файле не может выполняться никакого опережающего чтения, если только редиректор не знает, что он имеет блокированный диапазон опережающего чтения. Если сервер предоставляет исключающую oplock, клиент может выполнить некоторую оптимизацию для файла, например блокирование буферизации, чтение и запись данных.
Как можно видеть, когда клиент А открывает файл, он может запросить исключительную блокировку оріоскв. Если больше никто не открыл этот файл на сервере, то оріоск предоставляется клиенту А. Если в некоторый момент в будущем другой клиент, например клиент В, запрашивает открытие того же самого файла, то серверу необходимо, чтобы клиент А прервал свою блокировку оріоск. Прерывание оріоск включает отправку клиентом А на сервер любых данных для записи или блокировки, которые он буфери-зировал, и затем уведомление сервера, что подтверждается отмена блокировки. Это синхронизирующее сообщение информирует сервер, что теперь допустимо разрешить клиенту В завершить открытие файла.
Клиент А должен также стереть все буферы опережающего чтения, которые он имел для файла.