Локальные сети персональных компьютеров. Работа с сервером Novell NetWare


Отображение дисков рабочей станции - часть 4


Приведем формат буфера ответа:

struct REPLAY { WORD PacketLength; // размер пакета BYTE NewDirectoryHandle; // новый индекс каталога BYTE EffectiveRightsMask ; // маска прав доступа };

Для отмены отображения диска вместо функции DeallocateDirectoryHandle можно использовать функцию E2h прерывания INT 21h, заполнив буфер запроса следующим образом:

struct REQUEST { WORD PacketLength; // размер пакета запроса BYTE Function; // должно быть равно 20 BYTE DirectoryHandle; // индекс каталога };

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

Временное отображение выполняется функцией AllocTemporaryDirectoryHandle():

int AllocTemporaryDirectoryHandle(BYTE DirectoryHandle, char *DirectoryPath, char DriveLetter, BYTE *NewDirectoryHandle, BYTE *EffectiveRightsMask);

Параметры этой функции полностью аналогичны параметрам функции AllocPermanentDirectoryHandle(). Дополнительно к дискам с именами A - Z вы можете использовать диски, обозначаемые следующими символами: [, \, ], ^, _, '.

Для временного отображения диска на сетевой каталог вы можете воспользоваться функцией E2h прерывания INT 21h. Вам надо заполнить буфер запроса аналогично тому, как это нужно для создания постоянного отображения, но в поле Function необходимо указать значение 19. Формат буфера ответа полностью аналогичен формату, используемому при постоянном отображении.

Для получения адресов таблиц можно воспользоваться функцией EFh прерывания INT 21h:

На входе: AH = EFh;
AL = 0 - получить адрес таблицы индексов дисковых устройств (Drive Handle Table);

1 - получить адрес таблицы флагов дисковых устройств (Drive Flag Table);

2 - получить адрес таблицы номеров каналов дисковых устройств (Drive Connection ID Table);

3 - получить адрес таблицы номеров каналов

(Connection ID Table);

4 - получить адрес таблицы имен серверов (Server Name Table), состоящей из восьми элементов размером 48 байт. В каждом элементе записано имя сервера в формате текстовой строки, закрытой двоичным нулем.
На выходе: ES:SI = Адрес запрашиваемой таблицы.




Начало  Назад  Вперед