Изменение атрибутов
Для изменения атрибутов файлов, а также другой информации, такой, как время создания файла и идентификатор владельца, можно воспользоваться функцией 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 | Файл не найден |
int GetExtendedFileAttributes(char *FilePath, BYTE *ExtendedFileattributes);
Параметр FilePath задает путь к файлу, параметр ExtendedFileattributes определяет адрес байта памяти, в который будет записано значение байта расширенных атрибутов файла.
Функция возвращает 0 при успешном завершении или код ошибки:
Код ошибки | Значение |
0xFE | У программы нет прав для просмотра каталога |
0xFF | Файл не найден |
На входе: | AH | = | B6h; |
AL | = | Выполняемая функция: 00h - получить байт расширенного атрибута; 01h - изменить байт расширенного атрибута; |
|
DS:DX | = | Адрес буфера, содержащего путь к файлу; | |
CL | = | Новое значение расширенного атрибута. | |
На выходе: | AL | = | 0, если операция завершилась без ошибок, или код ошибки: FCh - нет прав для выполнения функции; FFh - файл не найден; |
CL | = | Если при вызове функции регистр AL содержал значение 00h, в регистр CL будет записано значение расширенного атрибута указанного файла. |