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

       

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


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

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

Параметры этой функции имеют такое же назначение, что и параметры функции _ScanFileInformation(): с помощью параметров DirectoryHandle и FilePath вы должны указать путь к файлу, остальные параметры задают новые значения для атрибутов файла и другой информации, имеющей отношение к файлу.

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

Для изменения атрибутов файлов и другой информации о файлах можно использовать функцию E3h прерывания INT21h:



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

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

struct REQUEST { WORD PacketLength; // размер пакета запроса BYTE Function; // должно быть равно 16 BYTE FileAttributes; // атрибуты файла BYTE ExtendedFileAttributes; // расширенные // атрибуты файла long Reserved; // зарезервировано BYTE CreationDate[2]; // дата создания BYTE LastAccessDate[2]; // дата последнего доступа BYTE LastUpdateDateAndTime[4]; // дата и время // обновления BYTE LastArchiveDateAndTime[4]; // дата и время выгрузки BYTE Reserved[60]; // зарезервировано BYTE DirectoryHandle; // индекс каталога BYTE SearchAttributes; // тип файлов для поиска BYTE PathLength; // длина поля пути BYTE DirectoryPath[PathLength]; // путь к каталогу };

Для изменения байта расширенных атрибутов удобно использовать функцию SetExtendedFileAttributes():

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

Параметр FilePath задает путь к файлу, а параметр NewExtendedFileattributes - новое значение для байта расширенных атрибутов.


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

Код ошибки Значение
0xFE У программы нет прав для изменения атрибута
0xFF Файл не найден
Для того чтобы узнать байт расширенного атрибута файла, используйте функцию GetExtendedFileAttributes():

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

Параметр FilePath задает путь к файлу, параметр ExtendedFileattributes определяет адрес байта памяти, в который будет записано значение байта расширенных атрибутов файла.

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

Код ошибки Значение
0xFE У программы нет прав для просмотра каталога
0xFF Файл не найден
Для получения и изменения расширенных атрибутов файла и можно использовать функцию B6h прерывания INT 21h:

На входе: AH = B6h;
AL = Выполняемая функция:

00h - получить байт расширенного атрибута;

01h - изменить байт расширенного атрибута;
DS:DX = Адрес буфера, содержащего путь к файлу;
CL = Новое значение расширенного атрибута.
На выходе: AL = 0, если операция завершилась без ошибок, или

код ошибки:

FCh - нет прав для выполнения функции;

FFh - файл не найден;
CL = Если при вызове функции регистр AL содержал значение 00h, в регистр CL будет записано значение расширенного атрибута указанного файла.

Содержание раздела