Untitled
8. УПРАВЛЕНИЕ ФАЙЛ-СЕРВЕРОМ
8.1. Получение справочной информации
8.2. Установка даты и времени
8.3. Запрет и разрешение подключений к серверу
8.4. Останов файл-сервера
В последней главе нашей книги мы расскажем вам о некоторых функциях,
предназначенных для получения справочной информации о состоянии
файл-сервера и для управления файл-сервером.
8.1.1. Определение даты и времени
Функция GetFileServerDateAndTime() заполняет массив из 7 байт
информацией об установке часов на файл-сервере:
void GetFileServerDateAndTime(BYTE *DateAndTime);
Параметр функции должен указывать на массив размером 7 байт. После
вызова функции этот массив будет заполнен следующим образом:
Номер байта | Содержимое |
0 | Год (от 0 до 99). Значение 80 соответствует 1980 году, если значение меньше чем 80, то этот год относится к XXI веку
|
1 | Месяц (от 1 до 12) |
2 | День месяца (от 1 до 31)
|
3 | Час (от 0 до 23) |
4 | Минуты (от 0 до 59) |
5 | Секунды (от 0 до 59) |
6 | День недели (от 0 до 6: 0 - воскресенье, 1 - понедельник,
2 - вторник и т. д.)
|
Вместо функции GetFileServerDateAndTime()
вы можете воспользоваться функцией E7h прерывания INT 21h:
На входе: | AH | =
| E7h; |
| DS:DX | = |
Адрес буфера размером 7 байт для записи информации о дате и времени, установленных на файл-сервере.
|
На выходе: | |
| Регистры не используются. |
8.1.2. Получение строк описания файл-сервера
Получить в текстовом виде сведения о версии операционной системы
Novell NetWare и о фирме-изготовителе можно с помощью функции
GetFileServerDescriptionStrings():
int GetFileServerDescriptionStrings(char *CompanyName,
char *Revision, char *RevisionDate,
char *CopyrightNotice);
Параметр CompanyName должен указывать на буфер размером 80 байт,
в который будет записано название фирмы-изготовителя NetWare (мы
полагаем, что это всегда будет Novell).
Параметр Revision должен указывать на буфер размером 80 байт,
в который будут записаны номер версии и номер изменений Novell
NetWare.
Параметр RevisionDate - указатель на буфер размером 24 байта,
в который будет записана дата внесения изменений.
Последний параметр, CopyrightNotice, должен указывать на буфер
размером 80 байт, в который будут записаны сведения о правах на
копирование операционной системы Novell NetWare.
Все строки будут закрыты двоичным нулем.
При успешном завершении функция возвращает нулевое значение.
8.1.3. Определение имени файл-сервера
Для определения имени файл-сервера по номеру канала, который рабочая
станция использует для связи с ним, можно при помощи функции GetFileServerName():
void GetFileServerName(WORD ConnectionID,
char *FileServerName);
Для файл-сервера, заданного параметром ConnectionID (номер канала),
функция возвращает имя файл-сервера в массив FileServerName размером
48 байт.
8.1.4. Определение возможности подключения к файл-серверу
Программа, запущенная с рабочей станции пользователем с правами
оператора консоли, может разрешать или запрещать подключение новых
пользователей к файл-серверу. Для этого предназначены функции
EnableFileServerLogin() и DisableFileServerLogin(), которые мы
рассмотрим ниже. Для определения текущего состояния файл-сервера
вы можете воспользоваться функцией GetFileServerLoginStatus():
int GetFileServerLoginStatus(int *LoginEnabledFlag);
По адресу, заданному параметром LoginEnabledFlag, функция запишет
значение флага разрешения подключения. Если значение флага равно
нулю, новые пользователи не могут подключаться к файл-серверу.
В случае успешного завершения функция возвращает нулевое значение.
Если эта функция вызвана пользователем, не имеющим прав оператора
консоли, возвращается код ошибки C6h.
Иногда желательно синхронизировать часы на файл-сервере с часами
рабочей станции. В этом вам поможет функция установки даты и времени
в часах файл-сервера.
8.2.1. Функция установки даты и времени
Дату и время в часах файл-сервера можно установить при помощи
функции SetFileServerDateAndTime():
int SetFileServerDateAndTime(WORD Year, WORD Month,
WORD Day, WORD Hour, WORD Minute, WORD Second);
Параметры этой функции задают новые значения для года (Year),
месяца (Month), дня месяца (Day), часов (Hour), минут (Minute)
и секунд (Second). Формат и назначение этих параметров аналогичны
элементам массива, возвращаемого функцией GetFileServerDateAndTime().
В случае успешного завершения функция возвращает нулевое значение.
Если эта функция вызвана пользователем, не имеющим прав оператора
консоли, возвращается код ошибки C6h.
Вместо функции SetFileServerDateAndTime() можно использовать функцию
E1h прерывания INT 21h:
На входе: | AH | =
| E1h; |
| DS:SI | = |
Адрес буфера запроса; |
| ES:DI | = |
Адрес буфера ответа. |
На выходе: | AL | =
| Код ошибки или 0, если операция завершилась без ошибок.
|
Буфер запроса:
struct REQUEST {
WORD PacketLength; // размер пакета запроса
BYTE Function; // должно быть равно 202
BYTE Year; // год
BYTE Month; // месяц
BYTE Day; // день
BYTE Hour; // часы
BYTE Minute; // минуты
BYTE Second; // секунды
};
Буфер ответа:
struct REPLAY {
WORD PacketLength; // размер пакета
};
Для того чтобы запретить подключение к файл-серверу новых пользователей
программа должна вызывать функцию DisableFileServerLogin():
int DisableFileServerLogin(void);
В случае успешного завершения функция возвращает нулевое значение.
Если эта функция вызвана пользователем, не имеющим прав оператора
консоли, возвращается код ошибки C6h.
Для того чтобы вновь разрешить пользователям подключаться к файл-серверу,
следует вызвать функцию EnableFileServerLogin():
int EnableFileServerLogin(void);
Эту функцию может вызывать только пользователь, имеющий права
оператора консоли.
Вместо функции DisableFileServerLogin() можно использовать функцию
E3h прерывания INT 21h:
На входе: | AH | =
| E3h; |
| DS:SI | = |
Адрес буфера запроса; |
| ES:DI | = |
Адрес буфера ответа. |
На выходе: | AL | =
| Код ошибки или 0, если операция завершилась без ошибок.
|
Буфер запроса:
struct REQUEST {
WORD PacketLength; // размер пакета запроса
BYTE Function; // должно быть равно 203
};
Буфер ответа:
struct REPLAY {
WORD PacketLength; // размер пакета
};
Вместо функции EnableFileServerLogin() также можно использовать
функцию E3h прерывания INT 21h, подготовив буфер запроса
и ответа следующим образом:
Буфер запроса:
struct REQUEST {
WORD PacketLength; // размер пакета запроса
BYTE Function; // должно быть равно 204
};
Буфер ответа:
struct REPLAY {
WORD PacketLength; // размер пакета
};
Иногда программе может потребоваться завершить работу файл-сервера.
Это можно сделать при помощи функции DownFileServer():
int DownFileServer(int ForceFlag);
Параметр ForceFlag определяет, надо ли завершать работу файл-сервера,
если есть рабочие станции, открывшие файлы в сетевых каталогах.
Если параметр установлен в нуль, при попытке завершить работу
файл-сервера возвращается код ошибки FFh, если имеются открытые
пользователями файлы.
Если значение параметра равно единице, сервер завершает свою работу
в любом случае.
В случае успешного завершения функция возвращает нулевое значение.
Если эта функция вызвана пользователем, не имеющим прав оператора
консоли, возвращается код ошибки C6h.
Вместо функции DownFileServer() можно использовать функцию E3h
прерывания INT 21h:
На входе: | AH | =
| E3h; |
| DS:SI | = |
Адрес буфера запроса; |
| ES:DI | = |
Адрес буфера ответа. |
На выходе: | AL | =
| Код ошибки или 0, если операция завершилась без ошибок.
|
Буфер запроса:
struct REQUEST {
WORD PacketLength; // размер пакета запроса
BYTE Function; // должно быть равно 211
BYTE ForceFlag; // FFh - завершить в любом случае
// 00h - завершить, если нет открытых
// файлов
};
Буфер ответа:
struct REPLAY {
WORD PacketLength; // размер пакета
};
|