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


         

Байт доступа используется для определения


Байт доступа используется для определения прав, необходимых для поиска, чтения, создания, редактирования или удаления объекта. Две тетрады байта отвечают за доступ на чтение и доступ на запись. Младшие четыре бита байта доступа отвечают за чтение, старшие - за запись.

Для тетрад определены значения от 0 до 4 - уровни доступа. Для того чтобы пользователь или другой объект получили доступ, тетрады его собственного байта доступа должны иметь значения, равные или превышающие значения в байте доступа объекта, к которому запрашивается доступ.

Приведем список возможных значений для уровней доступа:





















































0 Anyone Объект не подключен к файл-серверу
1 Logged Объект подключен к файл-серверу
2 Object Объект подключен к файл-серверу с именем и паролем
3 Supervisor Объект имеет права супервизора
4 NetWare Объект имеет права операционной системы Novell NetWare


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

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

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

Вместо функции GetBinderyAccessLevel() можно использовать функцию E3h прерывания INT21h:



















































На входе: AH = E3h;
DS:SI = Адрес буфера запроса;
ES:DI = Адрес буфера ответа.
На выходе: AL = Код ошибки или 0, если операция завершилась без ошибок.


Буфер запроса имеет следующий формат:

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

Буфер ответа имеет следующий формат:

struct REPLAY { WORD PacketLength; // размер пакета BYTE SecurityAccessLevel; // уровень доступа long ObjectID; // идентификатор объекта };

По идентификатору объекта вы можете получить его имя и тип с помощью функции GetBinderyObjectName():

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


Содержание  Назад  Вперед