On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru








 

8. УПРАВЛЕНИЕ ФАЙЛ-СЕРВЕРОМ

8.1. Получение справочной информации

8.2. Установка даты и времени

8.3. Запрет и разрешение подключений к серверу

8.4. Останов файл-сервера

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

8.1. Получение справочной информации

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. Установка даты и времени

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

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;        // размер пакета 
};


8.3. Запрет и разрешение подключений к серверу

Для того чтобы запретить подключение к файл-серверу новых пользователей программа должна вызывать функцию 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;        // размер пакета 
};


8.4. Останов файл-сервера

Иногда программе может потребоваться завершить работу файл-сервера. Это можно сделать при помощи функции 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;        // размер пакета 
};
Назад       Содержание       Вперёд