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


Объекты, коды объектов и права доступа - часть 2


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

Для тетрад определены значения от 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);




Начало  Назад  Вперед



Книжный магазин