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

       

Создание, переименование и удаление каталогов


Для работы с сетевыми каталогами вы можете использовать обычные функции MS-DOS, описанные в первом томе "Библиотеки системного программиста". Это возможно благодаря тому, что сетевая оболочка переназначает эти функции, посылая соответствующие запросы файл-серверу.

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

Для создания каталога вы можете воспользоваться функцией CreateDirectory():

int CreateDirectory(BYTE DirectoryHandle, char* DirectoryPath, BYTE MaximumRightsMask);

Параметры DirectoryHandle и DirectoryPath задают создаваемый каталог. Вы можете использовать оба параметра сразу, указывая индекс каталога, в котором вы будете создавать подкаталог (параметр DirectoryHandle ), и имя создаваемого подкаталога (параметр DirectoryPath). Можно также указывать только полный путь к создаваемому каталогу, а в качестве параметра DirectoryHandle задать нулевое значение.

Параметр MaximumRightsMask задает вид доступа, разрешенный пользователям для данного каталога:

Номер бита Доступ
0 Чтение файлов
1 Запись в файлы
2 Открытие файлов
3 Создание файлов
4 Удаление файлов
5 Можно создавать подкаталоги и задавать для создаваемых подкаталогов права доступа
6 Поиск файлов в каталоге
7 Изменение атрибутов файлов

Например, если в маске бит 3 установлен в 1, пользователи могут создавать в каталоге файлы и подкаталоги.

Приведенная ниже программа MAKEDIR позволит вам создавать каталоги и указывать при этом маску прав доступа.

В случае успешного завершения функция CreateDirectory() возвращает нулевое значение, в противном случае - код ошибки:

Код ошибки Значение
0x84 У пользователя недостаточно прав для создания подкаталога в данном каталоге
0x98 Указанный при создании каталога том не существует
0xFF Неправильно указан путь или имя каталога (например, в указанном каталоге уже существует подкаталог с таким же именем)
<
В случае успешного завершения функции регистр AL содержит нулевое значение.

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

struct REQUEST { WORD PacketLength; // размер пакета запроса BYTE Function; // должно быть равно 11 BYTE DirectoryHandle; // индекс каталога BYTE Reserved; // не используется BYTE PathLength; // длина пути к каталогу BYTE DirectoryPath[PathLength]; // путь к каталогу };

Код ошибки возвращается в регистре AL.

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

struct REQUEST { WORD PacketLength; // размер пакета запроса BYTE Function; // должно быть равно 15 BYTE DirectoryHandle; // индекс каталога BYTE PathLength; // длина пути к каталогу BYTE DirectoryPath[PathLength]; // путь к каталогу BYTE NameLength; // длина нового имени каталога BYTE NewDirectoryName[NameLength]; // новое имя каталога };


Содержание раздела