Приложение 1. Библиотека функций NetWare C Interface for DOS

9.1. Разные функции

Проверка сетевой оболочки

int GetShellVersionInformation(BYTE *MajorVersion,
                BYTE *MinorVersion, BYTE *RevisionLevel);


Функция возвращает 0xFF при нормальном завершении или 0 при ошибке.

Параметры:

MajorVersion верхний (major) номер версии
MinorVersion нижний (minor) номер версии
RevisionLevel номер изменения (revision)

Обмен байтов в 16-битовом слове

int IntSwap(int UnswappedInteger);


Функция меняет местами байты в 16-битовом слове, которое передается ей в качестве параметра, возвращая полученное значение.

Параметры:

UnswappedInteger преобразуемое слово

Обмен байтов в 32-битовом слове

long LongSwap(long UnswappedLong);


Функция меняет местами байты в 32-битовом слове, которое передается ей в качестве параметра, возвращая полученное значение.

Параметры:

UnswappedLong преобразуемое слово

9.2. Каналы, подключение к файл-серверу и отключение от 9.3. файл-сервера

Подключение к файл-серверу

int AttachToFileServer(char *ServerName, WORD *ConnectionID);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

ServerName указатель на текстовую строку с именем файл-сервера
ConnectionID адрес переменной типа WORD, в которую будет записан номер созданного канала

Отключение от файл-сервера

void DetachFromFileServer(WORD ConnectionID);


Параметры:

ConnectionID номер канала, распределенного серверу, от которого вы собираетесь отключиться

Получить номер канала первичного сервера

WORD GetPrimaryConnectionID(void);


Функция возвращает номер канала первичного сервера.

Получить номер канала текущего сервера

WORD GetDefaultConnectionID(void);


Функция возвращает номер канала текущего сервера.

Установить предпочтительный сервер

void SetPreferredConnectionID(BYTE ConnectionID);


Параметры:

ConnectionID номер канала для сервера, который должен стать предпочтительным

Подключение к файл-серверу

int LoginToFileServer(char *ObjectName, WORD ObjectType,
                        char *ObjectPassword);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

ObjectName указатель на имя пользователя, под которым его зарегистрировал супервизор сети или руководитель группы
ObjectType тип объекта
ObjectPassword указатель на текстовую строку, содержащую пароль пользователя

Отключение от всех файл-серверов

void Logout(void);


Отключение от одного файл-сервера

void LogoutFromFileServer(WORD ConnectionID);


Параметры:

ConnectionID номер канала сервера, от которого выполняется отключение

9.3. Работа с томами файл-сервера

Получить имя тома по номеру тома

int GetVolumeName(int VolumeNumber, char*VolumeName);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

VolumeNumber номер тома, для которого необходимо получить имя
VolumeName указатель на буфер размером 16 байт, в который будет записано имя тома

Получить номер тома по имени тома

int GetVolumeNamber(char*VolumeName, int *VolumeNumber);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

VolumeName имя тома
VolumeNumber указатель на переменную, в которую будет записан номер тома

Получить информацию о томе

int GetVolumeInfoWithNumber(BYTE VolumeNumber, char *VolumeName,
        WORD *TotalBlocks, WORD *SectorsPerBlock,
        WORD *AvailableBlocks, WORD *TotalDirectorySlots,
        WORD *AvailableDirectorySlots, WORD *Removable);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

VolumeNumber номер тома, для которого необходимо получить информацию
VolumeName имя тома
TotalBlocks общее количество блоков
SectorsPerBlock количество секторов в одном блоке
AvailableBlocks количество свободных блоков
TotalDirectorySlots количество каталогов, имеющихся на томе
AvailableDirectorySlots количество каталогов, которые можно дополнительно создать на томе
Removable признак того, что том является съемным

9.4. Отображение дисков рабочей станции на сетевые каталоги

Создание нового элемента в таблице индексов каталога

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


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

DirectoryHandle индекс каталога
DirectoryPath полный путь к каталогу
DriveLetter отображаемый диск
NewDirectoryHandle указатель на переменную, в которую будет записан индекс, связанный с отображаемым каталогом
EffectiveRightsMask указатель на байт памяти, в который будет записана маска прав доступа пользователя в данном каталоге

Удаление элемента из таблицы индексов каталога

int DeallocateDirectoryHandle(BYTE DirectoryHandle);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

DirectoryHandle индекс каталога, для которого удаляется элемент из таблицы индексов

Получить индекс каталога по номеру диска

int GetDirectoryHandle(char Drive);


Функция возвращает индекс каталога или 0 при ошибке.

Параметры:

Drive номер диска, для которого необходимо получить индекс каталога (0 - A:, 1 - B:, и т. д.)

Создание временного элемента в таблице индексов каталога

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


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

DirectoryHandle индекс каталога
DirectoryPath полный путь к каталогу
DriveLetter отображаемый диск
NewDirectoryHandle указатель на переменную, в которую будет записан индекс, связанный с отображаемым каталогом
EffectiveRightsMask указатель на байт памяти, в который будет записана маска прав доступа пользователя в данном каталоге

9.5. Просмотр содержимого каталогов

Поиск подкаталогов в сетевых каталогах

int ScanDirectoryInformation(BYTE DirectoryHandle,
        char *SearchDirectoryPath, int *SequenceNumber,
        char *DirectoryName, BYTE *CreationDateAndTime,
        long *OwnerObjectID, BYTE *MaximumRightsMask);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

DirectoryHandle индекс просматриваемого каталога
SearchDirectoryPath путь к просматриваемому каталогу
SequenceNumber указатель на слово, которое должно содержать нулевое значение при первом вызове функции
DirectoryName имя обнаруженного подкаталога
CreationDateAndTime указатель на область памяти, размером 4 байта, в которую будет записана информация о дате и времени создания найденного подкаталога
OwnerObjectID указатель на слово, в котором будет записан идентификатор пользователя, создавшего каталог
MaximumRightsMask указатель на байт, в который будет записано значение маски прав доступа, связанное с данным каталогом

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

Создание каталога

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


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

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

Переименование каталога

int RenameDirectory(BYTE DirectoryHandle,
     char* DirectoryPath, char *NewDirectoryName);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

DirectoryHandle индекс каталога
DirectoryPath путь к каталогу
NewDirectoryName новое имя каталога

Удаление каталога

int DeleteDirectory(BYTE DirectoryHandle, char* DirectoryPath);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

DirectoryHandle индекс каталога
DirectoryPath путь к каталогу

Получение маски прав доступа каталога

int GetEffectiveDirectoryRights(BYTE DirectoryHandle,
    char *DirectoryPath, BYTE *EffectiveRightsMask);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

DirectoryHandle индекс каталога
DirectoryPath путь к каталогу
EffectiveRightsMask указатель на байт памяти, в который будет записан байт маски прав доступа

Изменение атрибутов каталога

int SetDirectoryInformation(BYTE DirectoryHandle,
     char *DirectoryPath, BYTE *NewCreationDateAndTime,
     long NewOwnerObjectID, BYTE MaximumRightsMask);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

DirectoryHandle индекс каталога
DirectoryPath путь к каталогу
NewCreationDateAndTime указатель на массив из четырех байт с новыми значениями даты и времени
NewOwnerObjectID идентификатор нового владельца каталога
MaximumRightsMask новое значение для маски прав доступа каталога

Изменение маски доступа каталога

int ModifyMaximumRightsMask(BYTE DirectoryHandle,
       char *DirectoryPath, BYTE RevokeRightsMask,
       BYTE GrantRightsMask);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

DirectoryHandle индекс каталога
DirectoryPath путь к каталогу
RevokeRightsMask удаляемые права доступа
GrantRightsMask добавляемые права доступа

9.7. Работа с файлами

Поиск файлов

int _ScanFileInformation(BYTE DirectoryHandle, char *FilePath,
   BYTE SearchAttributes, int *SequenceNumber, char *FileName,
   BYTE *FileAttributes, BYTE *ExtendedFileAttributes,
   long *FileSize, char *CreationDate, char *LastAccessDate,
   char *LastUpdateDateAndTime, char *LastArchiveDateAndTime,
   long *FileOwnerID);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

DirectoryHandle индекс просматриваемого каталога
FilePath путь к просматриваемому каталогу
SearchAttributes параметр определяет, какие типы файлов
нужно найти
SequenceNumber параметр при первом вызове функции должен указывать на переменную, которая имеет
значение 0xFFFF
FileName указатель на буфер размером 15 байт, в который будет записано имя найденного файла
FileAttributes атрибуты файла
ExtendedFileAttributes расширенные атрибуты файла
FileSize размер файла
CreationDate дата создания файла
LastAccessDate дата последнего доступа к файлу
LastUpdateDateAndTime дата и время последнего обновления
содержимого файла
LastArchiveDateAndTime дата и время выгрузки файла
FileOwnerID идентификатор пользователя, создавшего файл

Изменение атрибутов файла

int SetFileInformation(BYTE DirectoryHandle, char *FilePath,
   BYTE SearchAttributes, BYTE FileAttributes,
   BYTE ExtendedFileAttributes, char *CreationDate,
   char *LastAccessDate, char *LastUpdateDateAndTime,
   char *LastArchiveDateAndTime, long *FileOwnerID);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

DirectoryHandle индекс файла
FilePath путь к файлу
SearchAttributes тип файла
FileAttributes новые атрибуты файла
ExtendedFileAttributes новые расширенные атрибуты файла
CreationDate новая дата создания файла
LastAccessDate новая дата последнего доступа к файлу
LastUpdateDateAndTime новые дата и время последнего обновления содержимого файла
LastArchiveDateAndTime новые дата и время выгрузки файла
FileOwnerID новый идентификатор пользователя, создавшего файл

Получение байта расширенных атрибутов

int GetExtendedFileAttributes(char *FilePath,
                BYTE *ExtendedFileAttributes);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

FilePath путь к файлу
ExtendedFileAttributes расширенные атрибуты файла

Изменение байта расширенных атрибутов

int SetExtendedFileAttributes(char *FilePath,
                BYTE *NewExtendedFileattributes);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

FilePath путь к файлу
NewExtendedFileAttributes новые расширенные атрибуты файла

Копирование файлов

int FileServerFileCopy(int FromHandle, int ToHandle,
        long SourceFileOffset, long DestinationFileOffset,
        long NumberOfBytesToCopy, long *BytesCopied);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

FromHandle индекс файла, из которого копируются данные
ToHandle индекс файла, в который копируются данные
SourceFileOffset смещение в исходном файле
DestinationFileOffset смещение в выходном файле
NumberOfBytesToCopy количество копируемых байт
BytesCopied указатель на переменную, в которую будет записано количество действительно скопированных байт

Удаление файлов

int EraseFiles(BYTE DirectoryHandle, char *FilePath, 
                BYTE SearchAttributes);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

DirectoryHandle индекс каталога, в котором находится удаляемый файл
FilePath путь к удаляемому файлу
SearchAttributes атрибуты удаляемого файла

9.8. Синхронизация процессов

Добавление файла в группу

int LogFile(char *FileName, BYTE LockDirective,WORD Timeout);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

FileName путь к файлу, который необходимо добавить в группу
LockDirective параметр определяет, надо ли блокировать файл сразу после его добавления в группу
Timeout период времени (в 18-х долях секунды), в течение которого файл-сервер будет ожидать, если файл нельзя заблокировать немедленно

Удаление файла из группы

int ClearFile(char *FileName);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

FileName путь к файлу, который необходимо удалить из группы

Удаление группы и разблокирование всех файлов

void ClearFileSet(void);


Блокирование группы файлов

int LockFileSet(WORD Timeout);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

Timeout период времени (в 18-х долях секунды), в течение которого файл-сервер будет ожидать, если группу файлов нельзя заблокировать немедленно

Разблокирование отдельных файлов

int ReleaseFile(char *FileName);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

FileName путь к файлу, который необходимо разблокировать

Разблокирование всех файлов

void  ReleaseFileSet(void);


Добавление физической записи в группу

int LogPhysicalRecord(int FileHandle, long RecordStartOffset,
    long RecordLength, BYTE LockDirective,WORD Timeout);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

FileHandle индекс файла, которому принадлежит блокируемая запись
RecordStartOffset смещение от начала файла
RecordLength размер блокируемой записи в байтах
LockDirective параметр определяет, надо ли блокировать запись сразу после добавления ее в группу
Timeout период времени (в 18-х долях секунды), в течении которого файл-сервер будет ожидать, если запись нельзя заблокировать немедленно

Удаление записи из группы

int ClearPhysicalRecord(int FileHandle,
    long RecordStartOffset, long RecordLength);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

FileHandle индекс файла, которому принадлежит запись
RecordStartOffset смещение от начала файла
RecordLength размер блокируемой записи в байтах

Разблокирование группы записей и удаление группы

void ClearPhysicalRecordSet(void);


Блокирование группы физических записей

int LockPhysicalRecordSet(BYTE LockDirective, WORD Timeout);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

LockDirective параметр LockDirective задает режим блокирования. Если он равен нулю, записи блокируются для монопольного использования заблокировавшей записи программой. Если параметр имеет значение единице, записи блокируются для совместного использования в режиме чтения
Timeout период времени (в 18-х долях секунды), в течение которого файл-сервер будет ожидать, если группу записей нельзя заблокировать немедленно

Разблокирование отдельных записей

int ReleasePhysicalRecord(int FileHandle,
    long RecordStartOffset, long RecordLength);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

FileHandle индекс файла, которому принадлежит запись
RecordStartOffset смещение от начала файла
RecordLength размер записи в байтах

Разблокирование всех физических записей

void  ReleasePhysicalRecordSet(void);


Добавление логической записи в группу

int LogLogicalRecord(char LogicalRecordName,
    BYTE LockDirective,WORD Timeout);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

LogicalRecordName имя логической записи, добавляемой в группу блокируемых
LockDirective параметр определяет, надо ли блокировать запись сразу после добавления ее в группу
Timeout период времени (в 18-х долях секунды), в течении которого файл-сервер будет ожидать, если запись нельзя заблокировать немедленно

Удаление логической записи из группы

int ClearLogicalRecord(char LogicalRecordName);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

LogicalRecordName имя логической записи

Разблокирование всех логических записей и удаление группы

void ClearLogicalRecordSet(void);


Блокирование группы логических записей

int LockLogicalRecordSet(WORD Timeout);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

Timeout период времени (в 18-х долях секунды), в течение которого файл-сервер будет ожидать, если группу логических записей нельзя заблокировать немедленно

Разблокирование отдельных логических записей

int ReleaseLogicalRecord(char LogicalRecordName);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

LogicalRecordName имя логической записи

Разблокирование всех логических записей

void  ReleaseLogicalRecordSet(void);


Открытие семафора

int OpenSemaphore(char *SemaphoreName, int InitialValue,
      long *SemaphoreHandle, WORD *OpenCount);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

SemaphoreName имя открываемого семафора
InitialValue значение семафора при первом открытии
SemaphoreHandle указатель на переменную, в которую будет записан индекс открытого семафора
OpenCount счетчик использования семафора

Закрытие семафора

int CloseSemaphore(long SemaphoreHandle);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

SemaphoreHandle индекс семафора

Определение состояния семафора

int ExamineSemaphore(long SemaphoreHandle,
      int *SemaphoreValue, WORD *OpenCount);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

SemaphoreHandle индекс семафора
SemaphoreValue значение семафора
OpenCount счетчик использования

Уменьшение значения семафора

int WaitOnSemaphore(long SemaphoreHandle, WORD Timeout);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

SemaphoreHandle индекс семафора
Timeout время, в течении которого функция ожидает доступность ресурса (в 18-х долях секунды).

Увеличение значения семафора

int SignalSemaphore(long SemaphoreHandle);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

SemaphoreHandle индекс семафора

9.9. Работа с базой объектов Bindery

Определение собственного уровня доступа

int GetBinderyAccessLevel(BYTE *SecurityAccessLevel, long *ObjectID);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

SecurityAccessLevel указатель на слово, в которое будет записан уровень доступа
ObjectID указатель на двойное слово, в которое будет записан идентификатор пользователя

Получение имени и типа объекта по его идентификатору

 int GetBinderyObjectName(long ObjectID,
     char *ObjectName, WORD *ObjectType);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

ObjectID идентификатор объекта
ObjectName указатель на переменную, в которую будет записано имя объекта
ObjectType указатель на переменную, в которую будет записан тип объекта

Получение идентификатора объекта по его имени и типу

int GetBinderyObjectID(char *ObjectName,WORD ObjectType, long *ObjectID);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

ObjectName имя объекта
ObjectType тип объекта
ObjectID указатель на переменную, в которую будет записан идентификатор объекта

Поиск объектов в базе Bindery

int ScanBinderyObject(char *SearchObjectName, WORD SearchObjectType,
  long *ObjectID, char *ObjectName, WORD *ObjectType, 
  char *ObjectHasProperties, char *ObjectFlag, char *ObjectSecurity);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

SearchObjectName шаблон имени объекта
SearchObjectType тип объекта, который нужно найти, или -1 для поиска объектов всех типов
ObjectID при первом вызове в переменную, на которую указывает параметр ObjectID, необходимо записать значение -1. В дальнейшем в эту переменную будет записываться идентификатор найденного объекта
ObjectName имя найденного объекта
ObjectType тип найденного объекта
ObjectHasProperties в переменную, на которую указывает параметр ObjectHasProperties, записывается значение 0xFF, если объект имеет дополнительную связанную с ним информацию (Properties), которую можно извлечь специально предназначенными для этого функциями
ObjectFlag флаг
ObjectSecurity байт доступа

Поиск записей для объектов

int ScanProperty(char *ObjectName, WORD ObjectType, 
   char *SearchPropertyName, long *SequenceNumber,
   char *PropertyName, char *PropertyFlag, char *PropertySecurity,
   char *PropertyHasValue, char *MoreProperties);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

ObjectName имя объекта
ObjectType тип объекта
SearchPropertyName имя записи или шаблон имени записи
SequenceNumber при первом вызове переменная, на которую указывает параметр SequenceNumber, должна содержать
значение -1. При последующих вызовах содержимое этой переменной будет изменяться автоматически
PropertyName имя записи
PropertyFlag флаг записи
PropertySecurity байт доступа
PropertyHasValue признак того, что запись имеет значения
MoreProperties признак того, что в объекте есть еще и другие записи

9.10. Передача и прием сообщений

Определение режима приема сообщений

BYTE GetBroadcastMode(void);


Функция возвращает значение в диапазона от 0 до 3, соответствующее текущему режиму приема сообщений.

Установка режима приема сообщений

void SetBroadcastMode(BYTE BroadcastMode);


Параметры:

BroadcastMode новый режим приема сообщений

Передача сообщений пользователям

int SendBroadcastMessage(char *Message, WORD *ConnectionList,
       BYTE *ResultList, WORD ConnectionCount);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

Message передаваемое сообщение
ConnectionList указатель на массив слов, содержащий номера каналов, используемых файл-сервером для связи с рабочими станциями
ResultList массив байт, в котором для каждой станции отражается результат посылки сообщения
ConnectionCount размер массива ConnectionList

Запись сообщения в журнал

int LogNetworkMessage(char *Message);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

Message cообщение, которое должно быть записано в журнал (файл net$log.msg в каталоге SYS:SYSTEM). Размер сообщения не должен превышать 80 символов, включая закрывающий строку двоичный ноль

Прием сообщений

int GetBroadcastMessage(char *MessageBuffer);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

MessageBuffer буфер для принимаемого сообщения

9.11. Управление файл-сервером

Определение даты и времени

void GetFileServerDateAndTime(BYTE *DateAndTime);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

DateAndTime указатель на массив размером 7 байт, в который будет записана информация о дате и времени

Получение строк описания файл-сервера

int GetFileServerDescriptionStrings(char *CompanyName,
        char *Revision, char *RevisionDate, char *CopyrightNotice);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

CompanyName указатель на буфер размером 80 байт, в который будет записано название фирмы-изготовителя NetWare
Revision указатель на буфер размером 80 байт, в который будут записаны номер версии и номер изменений Novell NetWare
RevisionDate указатель на буфер размером 24 байта, в который будет записана дата внесения изменений
CopyrightNotice указатель на буфер размером 80 байт, в который будут записаны сведения о правах на копирование операционной системы Novell NetWare

Определение имени файл-сервера

void GetFileServerName(WORD ConnectionID, char *FileServerName);


Параметры:

ConnectionID номер канала, используемый рабочей станцией для связи
с файл-сервером
FileServerName указатель на буфер размером 48 байт, в который будет записано имя файл-сервера

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

int GetServerInformation(int StructSize, FILE_SERV_INFO *ServerInfo);


Параметры:

StructSize количество байт, которые необходимо записать в структуру FILE_SERV_INFO, обычно используется значение
sizeof(struct FILE_SERV_INFO)
ServerInfo указатель на структуру FILE_SERV_INFO, в которую будет записана информация о файл-сервере

Формат структуры FILE_SERV_INFO:

typedef struct  {
         char    serverName[48];
         BYTE    netwareVersion;
         BYTE    netwareSubVersion;
         WORD    maxConnectionsSupported;
         WORD    connectionsInUse;
         WORD    maxVolumesSupported;
         BYTE    revisionLevel;
         BYTE    SFTLevel;
         BYTE    TTSLevel;
         WORD    peakConnectionsUsed;
         BYTE    accountingVersion;
         BYTE    VAPversion;
         BYTE    queingVersion;
         BYTE    printServerVersion;
         BYTE    virtualConsoleVersion;
         BYTE    securityRestrictionLevel;
         BYTE    internetBridgeSupport;
 } FILE_SERV_INFO;


Описание полей структуры FILE_SERV_INFO:

Имя поля Описание
serverName имя файл-сервера
netwareVersion версия операционной системы Novell NetWare, работающей на данном файл-сервере
netwareSubVersion номер изменения версии операционной системы Novell NetWare, работающей на данном файл-сервере
maxConnectionsSupported максимальное количество каналов, которые данный файл-сервер может создать с рабочими станциями
connectionsInUse количество используемых в настоящий момент каналов
maxVolumesSupported максимальное количество сетевых томов, которое может быть создано на данном файл-сервере
revisionLevel номер изменений
SFTLevel версия системы SFT
TTSLevel версия системы обработки транзакций TTS
peakConnectionsUsed пиковое количество используемых каналов
accountingVersion версия системы учета работы пользователей
VAPversion версия системы VAP
queingVersion версия системы работы с очередями
printServerVersion версия сервера печати
virtualConsoleVersion версия виртуальной консоли
securityRestrictionLevel уровень ограничения доступа
internetBridgeSupport поддержка мостов между сетями

Определение возможности подключения к файл-серверу

int GetFileServerLoginStatus(int *LoginEnabledFlag);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

LoginEnabledFlag по адресу, заданному параметром LoginEnabledFlag, функция запишет значение флага разрешения подключения

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

int SetFileServerDateAndTime(WORD Year, WORD Month,
                WORD Day, WORD Hour, WORD Minute, WORD Second);


Параметры:

Year новое значение для года
Month месяц
Day день месяца
Hour часы
Minute минуты
Second секунды

Запрет подключения к файл-серверу

int DisableFileServerLogin(void);


Функция возвращает 0 при успешном завершении или код ошибки.

Разрешение подключения к файл-серверу

int EnableFileServerLogin(void);


Функция возвращает 0 при успешном завершении или код ошибки.

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

int DownFileServer(int ForceFlag);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

ForceFlag параметр определяет, надо ли завершать работу файл-сервера, если есть рабочие станции, открывшие файлы в сетевых каталогах. Если параметр установлен в 0, при попытке завершить работу файл-сервера возвращается код ошибки FFh, если имеются открытые пользователями файлы. Если значение параметра равно 1, сервер завершает свою работу в любом случае

9.12. Работа с протоколом IPX

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

Инициализация драйвера IPX

int IPXInitialize(void) ;


Функция возвращает 0 при успешном завершении или код ошибки.

Открытие сокета

int IPXOpenSocket(char *SocketNumber, char SocketType) ;


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

SocketNumber указатель на двухбайтовый массив, содержащий значение сокета или ноль, если требуется получить динамический сокет
SocketType 00h - короткоживущий сокет,
FFh - долгоживущий сокет

Закрытие сокета

int IPXCloseSocket(char *SocketNumber);


Функция возвращает 0 при успешном завершении или код ошибки.

Параметры:

SocketNumber указатель на двухбайтовый массив, содержащий значение закрываемого сокета

Прием IPX-пакета

void IPXListenForPacket(ECB *EventControlBlock);


Параметры:

EventControlBlock указатель на блок ECB

Передача пакета

void IPXSendPacket(ECB *EventControlBlock);


Параметры:

EventControlBlock указатель на блок ECB

Отмена блока ECB

void IPXCancelEvent(ECB *EventControlBlock);


Параметры:

EventControlBlock указатель на блок ECB

Определение собственного сетевого адреса

void IPXGetInternetworkAddress(IPXAddress *NetworkAddress) ;


Параметры:

NetworkAddress указатель на массив из 12 байт, в который будет записан полный сетевой адрес

Типы данных

Сетевой адрес

typedef struct IPXAddress {
    BYTE    network[4];
    BYTE    node[6];
    BYTE    socket[2];
} IPXAddress;


Заголовок пакета IPX

typedef struct IPXHeader {
    WORD        checkSum;
    WORD        length;
    BYTE        transportControl;
    BYTE        packetType;
    IPXAddress  destination;
    IPXAddress  source;
} IPXHeader;


Дальние указатели на данные и функции

#define FARDATAPTR(type,var) type far *var
#define FARCODEPTR(type,var) type (far *var)()


Дескриптор фрагмента

typedef struct ECBFragment {
    FARDATAPTR(void,address);
    WORD    size;
} ECBFragment;


Блок ECB

typedef struct ECB {
    FARDATAPTR(void, linkAddress);
    FARCODEPTR(void, ESRAddress);
    BYTE        inUseFlag;
    BYTE        completionCode;
    WORD        socketNumber;
    BYTE        IPXWorkspace[4];
    BYTE        driverWorkspace[12];
    BYTE        immediateAddress[6];
    WORD        fragmentCount;
    ECBFragment fragmentDescriptor[2];
} ECB;